我正在使用mysql和php,我正在尝试测试一个调用的错误处理,但我无法弄清楚为什么这不会给出错误。我正在执行以下行:
if (! mysql_query("UPDATE Accounts SET disabled='0' WHERE id='15'")) { ... }
这是场景......有一个名为'Accounts'的表,但是没有id为15的记录(这是主键)。我从命令行和Web浏览器尝试过这个,但是这行执行没有问题。我查看了php手册,这是他们页面的引用:
For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
为什么这不会产生错误?非常感谢任何帮助!
答案 0 :(得分:2)
查询没有失败。
仅仅因为ID不存在,并不意味着查询失败。 Mysql成功找到了记录,发现没有,并且没有应用任何动作。这与!mysql_query语句建议的有很大不同。这意味着mysql无法运行您的命令。
这里你的命令运行成功,只是因为不存在的行而没有影响你的表。
答案 1 :(得分:1)
您的查询将不会更新任何记录
这不是错误,每次不满足WHERE
子句中的条件时都会发生错误。
有很多方法可以导致查询失败。其中一个是使用不存在的字段:
UPDATE Accounts SET blablabla='0' WHERE id='15'
答案 2 :(得分:0)
空结果集和错误之间存在差异。导致没有变化的查询不是错误,它只是一个空的有效结果,例如。
这永远不会返回任何东西:
mysql> select now() from dual where 1=0;
Empty set (0.01 sec)
但仍然不是错误。这只是一个空集。相比之下,这将始终返回一行:
mysql> select now() from dual where 1=1;
+---------------------+
| now() |
+---------------------+
| 2013-05-03 09:51:19 |
+---------------------+
1 row in set (0.00 sec)
然后出现错误。这不会返回空集,因为查询本身在解析器级别失败:
mysql> select now() from dual where abc=def;
ERROR 1054 (42S22): Unknown column 'abc' in 'where clause'