使用主键和WHERE时出现SQL语法错误

时间:2011-08-11 18:05:39

标签: php sql

我正在尝试将UPDATE用于我的MySQL数据库。我使用以下SQL代码:

$sql =  "UPDATE ToDo 
    SET Checked = -1
    WHERE Index = 1";

当我使用此代码时,我收到以下错误消息:“您的SQL语法中有错误;请检查与您的MySQL服务器版本对应的手册,以便在第3行的'Index = 1'附近使用正确的语法“

但是当我使用

$sql =  "UPDATE ToDo 
    SET Checked = -1
    WHERE Text = 'asdf'";

一切正常。

我的数据库有一个名为“ToDo”的表,有3个列:索引(int,主键,auto_increment),Checked(bool)和Text(文本)。

难道你不能“在哪里”使用主键还是忘记了其他内容?

希望你能帮助我。

4 个答案:

答案 0 :(得分:9)

尝试添加反引号:

UPDATE ToDo 
    SET `Checked` = -1
    WHERE `Index` = 1";

索引是保留字:

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

答案 1 :(得分:5)

index是MySQL的reserved word。你需要通过添加这样的反引号来逃避名称:

$sql =  "UPDATE ToDo 
SET Checked = -1
WHERE `Index` = 'asdf'";

答案 2 :(得分:0)

为了确保MySQL了解您正在讨论列名而不是保留字,您始终可以找到列名tablename.columnname。 在SELECT查询中也可以使用快捷方式:

UPDATE ToDo SET ToDo.Checked = -1 WHERE ToDo.Index = 1
SELECT u.Index FROM users u

另外,我建议不要在表格和列中使用驼峰个案。这被证明是错误的根源,并且在大多数情况下没有真正的好处。

答案 3 :(得分:-2)

布尔值为0或1,而不是-1。尝试使用0或1进行Checked,让我们知道会发生什么。