MySQL“CREATE TABLE”查询出错

时间:2013-04-20 14:00:40

标签: php mysql sql create-table

我知道之前已经被问了好几百次,但是我环顾互联网并找不到我的语法可能出错的地方:

mysql_select_db('Projects');

        $sql = "CREATE TABLE $data[ID] (
            ID INT NOT NULL,
            Creator INT NOT NULL,
            Name VARCHAR(20) NOT NULL,
            Version VARCHAR(20) NOT NULL,
            Status VARCHAR(20) NOT NULL,
            Date VARCHAR(20) NOT NULL,
            Skript VARCHAR(20) NOT NULL,
            Filename VARCHAR(20) NOT NULL,
            Downloads INT NOT NULL,
            PRIMARY KEY(ID)
            )";

        if (mysql_query($sql)){

            echo "Created";

        }else{

            echo "Not created, ".mysql_error();

        }

我尝试使用反引号,引号等但是徒劳无功。错误中显示的表名(21)是正确的。

这是我得到的错误,包括回声“未创建”;:

  

未创建,您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'23附近使用正确的语法(ID INT NOT NULL,Creator INT NOT NULL,Name VARCHAR(20)NOT NUL'在第1行

3 个答案:

答案 0 :(得分:6)

命名对象的规则,包括MySql中的表:

http://dev.mysql.com/doc/refman/5.1/en/identifiers.html

  

标识符可以以数字开头但是   除非引用可能不是唯一的   数字。

你不能用数字

命名你的表

这将起作用,例如

   $sql = "CREATE TABLE 't'.$data[ID] (
        ID INT NOT NULL,
        Creator INT NOT NULL,
        Name VARCHAR(20) NOT NULL,
        Version VARCHAR(20) NOT NULL,
        Status VARCHAR(20) NOT NULL,
        Date VARCHAR(20) NOT NULL,
        Skript VARCHAR(20) NOT NULL,
        Filename VARCHAR(20) NOT NULL,
        Downloads INT NOT NULL,
        PRIMARY KEY(ID)
        )";

如您所见,以t

开头

或在其周围使用反引号。像那样

   `$data[ID]`

答案 1 :(得分:0)

您的查询似乎正确,但$ data [ID]的值除外。你应该检查一下。

我认为问题在于$ data [ID]的价值是多少呢?另外,使用mysqli_query()或PDO(由bestprogrammerintheworld指示)而不是旧的mysql_query()。

答案 2 :(得分:0)

您已设法省略了最重要的信息,即触发SQL错误的SQL代码。但我们可以从生成它的PHP中收集一些提示:

$sql = "CREATE TABLE $data[ID] (
            ID INT NOT NULL,

...和错误消息:

  

在'23附近(ID INT NOT NULL

我怀疑你试图运行这个SQL:

CREATE TABLE 23 (
    ID INT NOT NULL

如果你真的想要创建一个名为23的表,你需要在每次使用它时用反引号引用它,包括创建:

CREATE TABLE `23` (
    ID INT NOT NULL