2013-04-20 100 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