現在の位置: ホーム> 最新記事一覧> なぜ$ errnoは常に0ですが、クエリは成功していませんか?

なぜ$ errnoは常に0ですが、クエリは成功していませんか?

M66 2025-05-30

MySQL拡張機能は、データベース操作にPHPとMySQLを使用する場合の一般的な選択肢です。データベースクエリのデバッグのエラーの場合、 mysqli :: $ errnoおよびmysqli :: $エラーは非常に便利なツールです。開発者がデータベースエラーコードとエラー情報を取得するのに役立ちます。ただし、開発者はこの状況に遭遇する場合があります。MySqli :: $ errnoは0を返しますが、クエリ操作は依然として失敗します。それで、なぜこれが起こるのですか?以下で詳細に説明しましょう。

1。mysqliの役割:: $ errno

mysqli :: $ errnoプロパティには、最後のmysql操作で発生したエラーコードが含まれています。通常、 0はエラーが発生しなかったことを意味しますが、非ゼロ値は何らかのエラーが発生したことを示します。これは、MySQLデータベースシステムのエラーコードです。 MySqli :: $エラーとともに、問題をすばやく見つけるのに役立ちます。

2。mysqli :: $ errnoが0を返す場合0

クエリの障害にもかかわらず、 mysqli :: $ errnoはまだ0を返します。これにはいくつかの理由が原因である可能性があります。

2.1 SQLクエリ自体がMySQLエラーを生成しません

mysqli :: $ errnoは、mysqlサーバーのエラーコードのみを返します。クエリがMySQLエラー(構文エラー、接続問題などなど)をトリガーしない場合、 MySQLI :: $ errnoはまだ0である可能性があります。現時点では、クエリが空白の結果を返したとしても、MySQLの実行中にエラーが発生したことを意味しないことに注意する必要があります。

たとえば、クエリが結果と一致しない場合、MySQLはエラーを返さず、単に空の結果セットを返すだけです。現時点では、mysqli :: $ errnoはまだ0であり、クエリ自体が失敗しません。

2.2非エラータイプSQLクエリが使用されます

一部のSQLクエリ(挿入更新削除など)は正常に実行される場合がありますが、影響を受ける行の数は0です。つまり、データベース内のデータは実際に変更されません。これは間違いではありませんが、開発者はクエリが成功していないため、誤解を招くと考えるかもしれません。成功しているかどうかをより適切に判断するために、 mysqli_affted_rows()を確認して、行が影響を受けるかどうかを確認できます。

2.3データベース接続の問題

場合によっては、データベース接続がクエリする前に有効期限が切れたり切断されたりする場合があり、 mysqli :: $ errnoはすぐにエラーを返さない場合があります。 mysqli :: $ connect_errnoを確認して、データベース接続が正常かどうかを確認できます。

3.この問題をデバッグする方法は?

mysqli :: $ errnoが常に0を返しますが、クエリがまだ失敗したことがわかった場合、次の方法を使用してデバッグできます。

3.1 mysqli :: $エラーを使用して、詳細情報を取得します

MySQLI :: $ errorプロパティには、現在の操作に関連するMySQLエラー情報が含まれています。 mysqli :: $ errnoが0を返したとしても、 mysqli :: $エラーを通じていくつかの手がかりを得ることができます。 Errno0であっても、エラーはいくつかの追加のヒントを与える場合があります。

 if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

3.2 SQLステートメントを確認します

SQLクエリに構文やロジックエラーがないことを確認してください。クエリを印刷して、PHPMyAdminなどのデータベース管理ツールで直接実行して、期待される結果が返されるかどうかを確認できます。

3.3影響を受ける行の数を確認します

挿入更新、または削除クエリの場合、 MySQLI_AFFECTED_ROWS()関数によって返される結果は、実行後にチェックする必要があります。 0が返された場合、クエリは実行されているが、データが変更されていないことを意味します。

 $affected_rows = $mysqli->affected_rows;
if ($affected_rows === 0) {
    echo "No rows were affected by the query.<br>";
}

3.4データベース接続を確認します

データベース接続の問題であると疑われる場合は、 mysqli_connect_errno()を使用して、データベース接続が成功しているかどうかを確認できます。

 if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

4。概要

mysqli :: $ errnoを使用する場合、 0が0を返しますが、クエリがまだ失敗した場合、クエリがMySQLエラーを生成しないか、クエリがデータを変更しないか、MySQLエラーではなく別のタイプの問題があります。この問題を解決するには、開発者はmysqli :: $ errormysqli_affted_rows()などのツールを組み合わせて、包括的なデバッグを実行する必要があります。これらの手順を通じて、データベースクエリの問題をより効果的に特定して解決できます。

 // データベースに接続します
$mysqli = new mysqli("localhost", "username", "password", "database");

// クエリ
$query = "SELECT * FROM some_table WHERE id = 1";
$result = $mysqli->query($query);

// 結果処理
if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

// 接続を閉じます
$mysqli->close();