2012-09-23 45 views
0

我的代碼如下: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

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) 
)"; 

可以聲明的主鍵右邊的列定義中

0

您已將主鍵定義放在列定義之間。首先聲明所有列,然後聲明最終的主鍵。

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') 
)";