2012-05-06 47 views
1

我在PHP一行代碼如下...獲得一個SQL語法錯誤

mysql_query("INSERT INTO `updates` (project_id, date, update) VALUES ('{$project}', '{$date}', '{$update}')") or die(mysql_error()); 

但是我得到下面的SQL語法錯誤...

您有一個您的SQL語法錯誤;檢查 對應於你的MySQL服務器版本正確的語法在行中使用 附近「更新)VALUES(」 14' ,‘2012-05-06’,‘測試更新’)」手動1

如果任何人都可以幫助我,那會很好,也許這很明顯,但我不能看到這裏有什麼問題!

+0

有一件事在確定MySQL抱怨什麼時特別有用,就是將查詢保存到一個變量中,然後「回顯」它。在查看這些錯誤時它確實有幫助。 –

回答

0

dateupdate是MySQL中的保留字。

您可以使用:

"INSERT INTO `updates` (project_id, `date`, `update`) VALUES ('{$project}', '{$date}', '{$update}')" 

雖然理想,你不應該使用保留字作爲一個實體的名稱。它沒有任何優勢,但有一些小缺點(例如,使SQL更便於使用)。

此外,如果project_id是一個整數類型字段,則將其傳遞給一個整數,而不是一個字符串。像:

INSERT INTO `updates` (project_id, `date`, `update`) VALUES ({$project}, '{$date}', '{$update}') 
+0

Downvoter謹慎解釋? – Corbin

1

更改查詢如下:

mysql_query("INSERT INTO `updates` (`project_id`, `date`, `update`) VALUES ('{$project}', '{$date}', '{$update}')") or die(mysql_error()); 

這是因爲日期和更新在MySQL的註冊關鍵字。我們不能直接在查詢中使用它。我們需要逃避它。

0

update是SQL中的一個關鍵字,用反引號封裝你的mysql字段。

0

首要的事情:你不能使用mysql保存字。當你使用它時,準備浪費你的時間找出錯誤。 這裏是保留字的列表:不要使用任何它 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

第二:即使你想要使用保留關鍵字。用戶表前綴或列前綴以及保留關鍵字。

第三個: 當您執行數據庫操作時,要麼在需要引用每個參數或只是簡單的用戶。 也就是說,如果你想引用數據庫表中的列比報價環繞每一列

"INSERT INTO `updates` (`project_id`, `date`, `update`) VALUES ('{$project}', '{$date}', '{$update}')" 

,如果你不報則引用他們沒有

"INSERT INTO updates (project_id, date, update) VALUES ('{$project}', '{$date}', '{$update}')" 

希望這會幫助你