MySQL在CREATE TABLE上的语法错误,数据值为tinytext,longtext和enum

时间:2012-09-23 23:02:55

标签: php mysql

我的代码如下:

$sql = "
    CREATE TABLE articles (
        articleUID int NOT NULL AUTO_INCREMENT, 
        PRIMARY KEY(articleUID), 
        by tinytext, 
        article longtext, 
        game enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other')
    )
";
if(mysql_query($sql, $con)) {
    echo "The table \"articles\" was created succesfully.<br />";
} else{
    echo "Error creating  table: " . mysql_error() . "<br />";
}

它是在PHP中,文件还有其他内容,但这是给我带来问题的部分。

当我尝试运行时,我得到的是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by tinytext, article longtext, game enum(Starcraft,Starcraft 2,Team Fortress 2,' at line 1    

我不知道你是否需要我的其余代码来解决这个问题,但如果你这样做,我会在编辑中发布它。谁能告诉我这里有什么问题?我已经尝试在枚举参数上使用\“代替',但这不起作用。

3 个答案:

答案 0 :(得分:3)

BYMySQL reserved word,在用作列或表标识符时必须使用反引号引用。

您可以在列定义中声明主键:

$sql = "CREATE TABLE articles (
  articleUID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  /* Quote the reserved word BY */
  `by` tinytext, 
  article longtext, 
  game enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other')
)";

或者,您可以使用括号

在列定义之后声明PRIMARY KEY
$sql = "CREATE TABLE articles (
  articleUID int NOT NULL AUTO_INCREMENT,
  `by` tinytext, 
  article longtext, 
  game enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other'),
  PRIMARY KEY (articleUID)
)";

答案 1 :(得分:2)

by是mysql中的关键字。如果您不想将其用作关键字,请引用它。在定义自动增量和主键时也会出错。

$sql = "CREATE TABLE articles (
    `articleUID` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `by` tinytext, 
    `article longtext,
    `game` enum('Starcraft','Starcraft 2','Team Fortress 2','Minecraft','Tekkit','other')
)";

答案 2 :(得分:0)

您已在列定义之间添加了主键定义。首先声明所有列,然后在最后声明主键。