为什么这不会出错

时间:2013-05-03 15:47:43

标签: php mysql

我正在使用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.

为什么这不会产生错误?非常感谢任何帮助!

3 个答案:

答案 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'