获得一个SQL语法错误

问题描述:

我在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抱怨什么时特别有用,就是将查询保存到一个变量中,然后“回显”它。在查看这些错误时它确实有帮助。 –

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

更改查询如下:

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

这是因为日期和更新在MySQL的注册关键字。我们不能直接在查询中使用它。我们需要逃避它。

update是SQL中的一个关键字,用反引号封装你的mysql字段。

首要的事情:你不能使用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}')" 

希望这会帮助你