2013-07-31 28 views
0

我想在我的PHP腳本將在更新數據庫中的字段寫一個MySQL,但是我得到的錯誤:MySQL的更新語法

Fatal error: Wrong SQL: Error: 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 ''user' SET 'currentsong' = '' WHERE 'userid' = '1893'' 

雖然使用此代碼。

$setcurrentsongsql = "UPDATE 'user' SET 'currentsong' = '$currentsong' WHERE 'userid' = '$sql1'"; 
$setcurrentsong = $db->query($setcurrentsongsql); 

我敢肯定這是簡單的事情,但我完全困惑不解。即使我用普通字符串替換變量,它也不起作用。

非常感謝您的幫助。

+0

刪除'''周圍的用戶,surroundong等,並再次測試。 – michi

回答

3

MySQL使用反引號`對列名和表名和撇號爲字符串常量。但是,除非您使用reserved keyword(例如,您的表格實際上是,稱爲「表格」),或者您的表格或列名稱包含空格(如「我的表格」),否則這些都不是必需的。

您可以使用:

$setcurrentsongsql = "UPDATE `user` SET `currentsong` = '$currentsong' WHERE `userid` = '$sql1'"; 

或者:

$setcurrentsongsql = "UPDATE user SET currentsong = '$currentsong' WHERE userid = '$sql1'"; 

而且,如果$currentsong來自不受信任的來源,你可能要擔心SQL injection

8

對錶格名稱和列名稱使用後退標記不是單引號。請嘗試以下操作:

$setcurrentsongsql = "UPDATE `user` SET `currentsong` = '$currentsong' WHERE `userid` = '$sql1'"; 

在MySQL中,標識符引號字符是反引號「`」。這個簡短的頁面應該給你的模式規則,標識等方面有很好的理解:http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

+1

這個答案本身是微不足道的或已經在評論中回答。你會從我這裏得到+1,如果你已經提到了爲什麼op應該使用撇號的back-ticks。 – samayo