2013-04-20 98 views
1

我知道,这已经被问过几百次,但我环顾四周互联网,但没有找到什么可能是错我的语法:错误与MySQL“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(); 

     } 

我尝试使用反引号,引号et.c但是徒劳。显示在错误中的表名(21)是正确的。

下面是我的错误,其中包括回声“不创建”:

不是创造,你在你的SQL语法错误;检查对应于您的MySQL服务器版本的手册,以便在第1行附近使用'23(ID INT NOT NULL,Creator INT NOT NULL,名称VARCHAR(20)NOT NUL'附近使用的正确语法

+0

$ data [ID]的值是多少? – bestprogrammerintheworld 2013-04-20 14:02:30

+0

如果在运行查询之前回显$ sql,会得到什么结果? – bestprogrammerintheworld 2013-04-20 14:04:23

+0

$ data [ID]的值是21,在反引号内工作! @bestprogrammerintheworld – SamTebbs33 2013-04-20 14:17:09

回答

6

命名规则对象,包括表在MySQL的:

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

标识符可以以数字开始,但除非 报价可能不包含数字仅

你不能命名表开始与数字

这将工作forexample

$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]` 
+0

“除非被引用” – 2013-04-20 14:08:37

+0

它可以通过反引号 – 2013-04-20 14:09:42

+0

引用谢谢!在反引号周围工作的表名! – SamTebbs33 2013-04-20 14:15:31

0

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

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

+0

PDO是另一种选择:-) – bestprogrammerintheworld 2013-04-20 14:05:28

+1

我试图保持简单的答案立即发送。我现在编辑。 – 2013-04-20 14:07:23

0

您已经设法省略了最重要的一条信息,即触发SQL错误的SQL代码。

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

...和错误消息:

附近'23(ID INT NOT NULL

我怀疑,但我们可以从产生它的PHP收集一些提示您尝试运行此SQL:

CREATE TABLE 23 (
    ID INT NOT NULL 

如果您确实想创建一个名为的表每次使用时都需要用反引号引用它,包括创建:

CREATE TABLE `23` (
    ID INT NOT NULL