2013-02-08 27 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。但这与你的问题无关。只是提示安全。 ;-)