1

我知道这已经被问过数百次了,但是我环顾互联网,找不到我的语法可能有什么问题:

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 服务器版本相对应的手册,以在第 1 行的 '23 ( ID INT NOT NULL, Creator INT NOT NULL, Name VARCHAR(20) NOT NUL' 附近使用正确的语法

4

3 回答 3

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]`
于 2013-04-20T14:04:36.733 回答
0

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

我认为问题在于 $data[ID] 的价值,它的价值是什么?此外,使用 mysqli_query() 或 PDO(如 bestprogrammerintheworld 所示)而不是旧的 mysql_query()。

于 2013-04-20T14:04:48.930 回答
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
于 2013-04-20T14:07:39.417 回答