2011-09-23 25 views
0

我有一個相當簡單的查詢與我的AJAX應用程序的工作,但它提供了以下錯誤:在使用WHERE分隔符選擇多列時MySQL語法錯誤?

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 'desc, price FROM products WHERE id='asfasfasf1'' at line 1

我被這個偶然,因爲我根本無法看到任何地方的語法錯誤:

echo json_encode($this->query("SELECT name, desc, price FROM products WHERE id='".$id."';"), JSON_FORCE_OBJECT); 

查詢()如下:

function query($query){ 
     $link = mysql_connect($this->host, $this->username, $this->password); 
     $connected = mysql_select_db($this->database, $link); 
     if(!$connected){ 
      die("Error: selecting database."); 
     } 
     $q = mysql_query($query); 
     if(!$q){ 
      return "Error: ".mysql_error(); 
     } 
     $result = mysql_fetch_assoc($q); 
     return $result; 
    } 

當然,這是一個對象內,但不應該有什麼關係呢。所有字段都是正確的,數據庫可以連接到,因爲查詢()與其他代碼多次使用並運行良好。請幫忙。

+0

1)我不認爲你必須用分號結束你的SQL語句2)你確定逗號實際上是逗號3)你是否嘗試輸出生成的查詢並在phpmyadmin中運行它? – naivists

回答

2

desc是SQL關鍵字(按降序排序)。如果你打算使用它作爲列名,嘗試引用它:

$this->query("SELECT name, `desc`, price FROM products WHERE id='".$id."';") 

了幾乎相同的例子見the MySQL manual on reserved words,以及關於如何處理關鍵字的更多細節。

或者你也可以將你的專欄重命名爲「description」。就像引用是「正確的」解決方案一樣,如果可以的話,避免使用保留字作爲列名是很有幫助的。

+0

非常感謝,我不敢相信我沒有注意到(我甚至用它來排序數據)!我要改變表名。謝謝。 – Nisk

0

有一個很好的機會id必須在雙引號,而不是單一的。

順便說一句,小心這種事情,因爲它使SQL注入攻擊非常容易。

+0

別擔心,我已經逃脫了輸入,並且此功能只能通過管理員訪問:-) – Nisk