Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么这不会出错_Php_Mysql - Fatal编程技术网

Php 为什么这不会出错

Php 为什么这不会出错,php,mysql,Php,Mysql,我正在使用mysql和php,并尝试测试调用的错误处理,但我不明白为什么这不会给出错误。我正在执行以下命令: if (! mysql_query("UPDATE Accounts SET disabled='0' WHERE id='15'")) { ... } 下面是一个场景。。。有一个名为“Accounts”的表,但没有id为15(主键)的记录。我在命令行和web浏览器中尝试过这一点,但这一行执行起来没有问题。我查看了php手册中的这一点,下面是他们页面中的一段引语: For other

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

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

查询没有失败

ID不存在并不意味着查询失败。Mysql成功地查找了记录,没有找到任何记录,并且没有应用任何操作。这是非常不同的,什么!mysql\u查询语句建议。这意味着mysql无法运行您的命令


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

查询没有失败

ID不存在并不意味着查询失败。Mysql成功地查找了记录,没有找到任何记录,并且没有应用任何操作。这是非常不同的,什么!mysql\u查询语句建议。这意味着mysql无法运行您的命令


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

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

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

UPDATE Accounts SET blablabla='0' WHERE id='15'

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

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

UPDATE Accounts SET blablabla='0' WHERE id='15'

空结果集和错误之间存在差异。一个不会导致任何更改的查询不是错误,它只是一个碰巧为空的有效结果,例如

这永远不会归还任何东西:

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'

空结果集和错误之间存在差异。一个不会导致任何更改的查询不是错误,它只是一个碰巧为空的有效结果,例如

这永远不会归还任何东西:

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'

不导致任何更改的更新不是错误。您的语句不更新任何行,但这不被视为错误。它成功执行,因为没有出现诸如“undefined column”、“table Not Existence”、“can not connect”等错误。在某些情况下,您希望对与
where
子句匹配的行发出更新,如果更新未找到任何内容,则可以。感谢您的输入帮助,我将重构代码以考虑这一点。不会导致任何更改的更新不是错误。您的语句不会更新任何行,但不会将其视为错误。它成功执行,因为没有出现诸如“undefined column”、“table Not Existence”、“can not connect”等错误。在某些情况下,您希望对与
where
子句匹配的行发出更新,如果更新未找到任何内容,则可以。感谢您的输入帮助,我将重构代码以考虑这一点。