2013-02-08 107 views
1

我在下面的代碼得到一個MySQL的語法錯誤:MySQL的語法錯誤(使用PHP)

$addcompany = mysql_query("INSERT INTO company (method, category, email, password, 
companyname, phone, address, state, zip, ratingcount, ratingscore, usage, date) 
VALUES ('$method','$category','$email','$temp_encrypted_password', 
'$companyname','$phone','$address','$state','$zip','0','0','0',CURDATE()) ") 
or die(mysql_error()); 

所以語句死亡。 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 'usage, date) VALUES 
('referral','referral','[email protected]','d90ccafeea7983' at line 1 

我檢查了我的表和所有的列名是正確的,似乎沒有要與我試圖插入VS什麼是允許進入任何衝突該列。

所以我非常惱火,在這一點上,我無法弄清楚什麼是一個簡單的錯誤。惹惱了,希望這裏的某個人能夠快速地指出我的權利。

感謝您的時間

+3

請停止使用'mysql_query',它已被棄用,並將在未來版本的PHP中刪除。建議切換到[PDO](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。確保你[妥善地逃脫了你的SQL](http://bobby-tables.com/),否則你可能會遭受嚴重的傷害。 – tadman 2013-02-08 23:06:16

+0

或者你可以試試mysqli_ ;-) – 2013-02-08 23:09:34

+0

由於支持指定佔位符的簡單原因,PDO比'mysqli'更好。這使得更容易驗證您的查詢是否構建正確,並避免重複綁定相同的數據多次。 fw。 – tadman 2013-02-08 23:12:26

回答

6

usagereserved word,必須使用反引號轉義。

... ratingscore, `usage`, date) ... 
+0

ftw。我會建議轉義所有的數據,像這樣的事情導致我在過去許多令人頭痛的 – 2013-02-08 23:07:39

+1

我只是推薦*不*使用保留字。那些反引號令人討厭。 – Kermit 2013-02-08 23:08:23

+0

謝謝,那就是問題所在。在我的代碼中發現了另一個問題,但我會爲它創建一個新帖子。僅供參考,儘管我沒有發佈它,但我在所有輸入的變量上使用了mysql_real_escape_string。這就是您轉義我的數據的含義,對吧? – 2013-02-08 23:13:29

0

試試這個

(method, category, email, password, 
companyname, phone, address, state, zip, ratingcount, ratingscore, \usage\, date) 

你不能直接使用'usage'作爲其保留字

1

嘗試把反引號圍繞您的字段名:`fieldname1`,`fieldname2`。這可以防止將mysql關鍵字作爲保留關鍵字。

此外,你應該過濾你的userInput。但這與你的問題無關。只是提示安全。 ;-)