0

私は 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.

これがエラーを生成しないのはなぜですか? どんな助けでも大歓迎です!

4

3 に答える 3

2

クエリは失敗していません。

ID が存在しないからといって、クエリが失敗するわけではありません。Mysql はレコードの検索に成功しましたが、レコードが見つからず、何もアクションを適用しませんでした。これは、!mysql_query ステートメントが示唆するものとは大きく異なります。これは、mysql がコマンドを実行できなかったことを意味します。

ここでコマンドは正常に実行されましたが、存在しない行のためにテーブルに影響を与えませんでした。

于 2013-05-03T15:51:03.967 に答える
1

クエリはレコードを更新しません。これはエラーではなく、句
の条件が満たされないたびに発生します。WHERE

クエリが失敗する原因はさまざまです。それらの 1 つは、存在しないフィールドを使用することです。

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)

それでもエラーにはなりません。ただの空集合です。比較すると、これは常に 1 つの行を返します。

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 に答える