0

コード:

データベースにデータを挿入するために、以下の簡単なコードをテストしています。

mysqli_query($con,"INSERT INTO Persons (Age) VALUES (35) WHERE FirstName='John'") or die("Error");

私のデータベースには、行がありませんFirstName=John(テストの一部です)。

私が期待していること:

db where に行がないため、エラー メッセージが送信されることをFirstName=John期待しています。die()

問題:

Die()エラーメッセージは送信されません。実際die()、dbに接続できない場合にのみエラーメッセージが送信されることを確認しました。

私が思うこと:

まあ、それはどのようにdie()機能するのかもしれません...しかし、接続がない以外の理由でクエリが実行されない場合、どのように通知を受けるのでしょうか?

4

5 に答える 5

2

クエリは有効なクエリであるため、mysqli_query は true を返すため、die は呼び出されません。

于 2013-09-22T04:53:29.150 に答える
2

これは正常です。mysqli_query は、クエリが失敗した場合、つまり SQL レベルが発生した場合にのみ FALSE を返します。0-affected rows クエリは失敗とは見なされません (SELECT クエリからの空の結果が失敗ではないのと同様)。そのような場合、mysqli_query は TRUE を返します。

あなたがしたいことは、の値をチェックして$con->affected_rows、最後のクエリによって影響を受けた行の数を取得し、それが 0 に等しい場合は死ぬことです。

于 2013-09-22T04:49:12.810 に答える
1

説明書にある通り、故障で"mysqli_query()返品。FALSE成功したSELECT, SHOW, DESCRIBE場合、またはEXPLAINクエリmysqli_query()は を返しますmysqli_result object。他の成功したクエリの場合mysqli_query() が返されますTRUE."

したがって、行がなくても失敗はありません。FirstName=John

mysqli_affected_rows挿入された行数を返すために使用できます

于 2013-09-22T04:47:37.010 に答える
0

Die()クエリが正常に実行されたため、起動しませんでした。の名を持つ行がなかったため、何も更新されませんでしたJohn

affected_rowsクエリで行が変更されたかどうかを確認する必要があります。

于 2013-09-22T04:49:12.553 に答える
0

SQLにエラーはありません。行がないだけです。結果の量でifを実行できます。それがここで理解したい場合は、手続き型およびオブジェクト指向のソリューションがあります。

http://php.net/manual/en/mysqli.query.php

あなたの場合、エラーがあったかどうかを知るために:

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

または結果を知りたい

if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
    printf("Select returned %d rows.\n", mysqli_num_rows($result));

    /* free result set */
    mysqli_free_result($result);
}
于 2013-09-22T04:49:47.013 に答える