現在の位置: ホーム> 最新記事一覧> next_result()が次の結果セットに正常に切り替えることを伝える方法は?

next_result()が次の結果セットに正常に切り替えることを伝える方法は?

gitbox 2025-05-02

データベース操作にPHPを使用する場合、特に複数のSQLクエリを実行する場合、 next_result()メソッドが必要になることがよくあります。 next_result()の目的は、オブジェクトを次のクエリの結果セットに切り替えることです。しかし、問題は次のとおりです。

next_result()の返品値

next_result()はブール値を返します。

  • return true :次の結果セットが次の結果セットに正常に切り替えられるか、次の結果セットが空であることを示します(たとえば、行を返さないステートメントを更新します)。

  • falseを返す:結果セットがなく、切り替えプロセス中にエラーが発生したことを意味します。

したがって、判断する最も直接的な方法は、next_result()の返品値を確認することです。

簡単な例を見てみましょう。

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

// 複数のクエリを実行します
$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            // 現在の結果セットを処理します
            while ($row = $result->fetch_assoc()) {
                echo "データ行:" . json_encode($row) . "<br>";
            }
            $result->free();
        } else {
            // 現在の声明はそうではありません SELECT のようなクエリ,多分 UPDATE、INSERT 待って
            if ($mysqli->errno) {
                echo "結果セットの保存に失敗しました,間違い:" . $mysqli->error . "<br>";
            }
        }

        // 次の結果セットに切り替えてみてください
        if ($mysqli->more_results()) {
            if (!$mysqli->next_result()) {
                echo "次の結果セットに切り替えると失敗しました,間違い:" . $mysqli->error . "<br>";
                break;
            }
        } else {
            // これ以上の結果セットはありません
            break;
        }

    } while (true);
} else {
    echo "複数のクエリを実行します失败,間違い:" . $mysqli->error;
}

$mysqli->close();
?>

より安全なモード

エラー検出の欠落を避けるために、 next_result()を呼び出す直後に$ mysqli-> errnoが0かどうかを確認することをお勧めします。 0ではない場合、 next_result()trueを返しますが、構文エラーなどのプロセス中にエラーが発生したことを意味します。

より厳格なバージョンは次のように書くことができます:

 if ($mysqli->more_results()) {
    if (!$mysqli->next_result()) {
        // 发生了切换間違い
        error_log("結果セットの切り替えに失敗しました:" . $mysqli->error);
        break;
    } elseif ($mysqli->errno) {
        // next_result() 戻る true,但实际出现了間違い
        error_log("結果セットの切り替え中に例外が発生しました:" . $mysqli->error);
        break;
    }
}

まとめ

next_result()が成功したかどうかを判断するには、次のことをする必要があります。

  1. next_result()の返品値がtrueかどうかを確認してください。

  2. $ mysqli-> errnoが0であるかどうかを確認してください。

  3. 適切なタイミングでmore_results()を使用して、next_result()を呼び出す必要があるかどうかを判断します。

複数のクエリは非常に強力ですが、エラーを処理するときは注意する必要があります。それ以外の場合は、隠されたバグが発生する傾向があります。

Multi_Query()およびnext_result()の詳細について詳しく知りたい場合は、公式ドキュメントを参照できます(サンプルURL、ドメイン名はgitbox.netに置き換えられました)。