0

我正在使用 mysql 和 php,并且正在尝试测试调用的错误处理,但我无法弄清楚为什么这不会产生错误。我正在执行以下行:

if (! mysql_query("UPDATE Accounts SET disabled='0' WHERE id='15'")) { ... }

这是场景......有一个名为“Accounts”的表,但没有 id 为 15 的记录(这是主键)。我已经从命令行和网络浏览器尝试过这个,但是这条线执行没有问题。我为此检查了 php 手册,这是他们页面中的引述:

For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

为什么这不会产生错误?任何帮助将不胜感激!

4

3 回答 3

2

查询没有失败。

仅仅因为 ID 不存在,并不意味着查询失败。mysql成功查找记录,没有找到,也没有应用任何动作。这与 !mysql_query 语句所暗示的有很大不同。这意味着 mysql 无法运行您的命令。

在这里,您的命令成功运行,只是由于行不存在而没有影响您的表。

于 2013-05-03T15:51:03.967 回答
1

您的查询不会更新任何记录。
这不是错误,每次WHERE不满足子句中的条件时都会发生这种情况。

有很多方法会导致您的查询失败。其中之一是使用不存在的字段:

UPDATE Accounts SET blablabla='0' WHERE id='15'
于 2013-05-03T15:51:49.860 回答
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'
于 2013-05-03T15:52:53.930 回答