現在の位置: ホーム> 最新記事一覧> next_result()を呼び出す前に、use_result()を正しく使用して結果を取得する方法は?

next_result()を呼び出す前に、use_result()を正しく使用して結果を取得する方法は?

gitbox 2025-04-29

PHPを使用してMySQL Multi-statementクエリを操作する場合、 Multi_Query()を使用して、 next_result()で複数の結果セットを通過することがよくあります。 next_result()を呼び出す前に、 use_result()を正しく使用することは、結果が見逃されたりエラー処理されたりしないことを確認するための重要なステップです。この記事では、正しい使用法を紹介し、完全なコードの例を示します。

なぜuse_result()が必要なのか

マルチステートメントクエリを実行した後、MySQLは複数の結果セットを返します。 PHPは、結果を取得する2つの方法を提供します: store_result()use_result() 。その中で、 use_result()はバッファーされていない方法であり、大量のデータボリュームの結果を読み取るのに適しており、すぐにサーバーからデータの読み取りを開始します。

現在の結果セットを処理する前にnext_result()を呼び出すと、現在の結果セットはmysqlによって破棄されます。これにより、これらの結果にアクセスできなくなり、エラーが発生する場合があります。したがって、 use_result()を最初に呼び出して、現在の結果を取得してから読み取る必要があります。

正しい使用法

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

if ($mysqli->connect_error) {
    die("接続に失敗しました: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM users; SELECT * FROM products;";
if ($mysqli->multi_query($sql)) {
    do {
        // 電話 next_result() 現在の結果セットは、前に取得する必要があります
        if ($result = $mysqli->use_result()) {
            while ($row = $result->fetch_assoc()) {
                print_r($row);
            }
            $result->free(); // 結果セットリソースをリリースすることを忘れないでください
        } else {
            echo "現在、結果セットやエラーはありません:" . $mysqli->error;
        }
    } while ($mysqli->next_result());
} else {
    echo "クエリに失敗しました:" . $mysqli->error;
}

$mysqli->close();
?>

注意すべきこと

  1. use_result()を1回だけ呼び出しますuse_result()は、結果セットごとに1回のみ使用できます。そうしないと、エラーが報告されます。

  2. リリースリソース:結果を処理した後、 $ result-> free()を呼び出してメモリを解放してください。

  3. エラーチェックuse_result()はfalseを返す場合があり、判断する必要があります。

結論

use_result()およびnext_result()の正しい順序をマスターすると、マルチステートメントクエリを処理する際に一般的な論理エラーを回避するだけでなく、プログラムの堅牢性も向上します。プロジェクトで複数のSQLクエリを呼び出し、結果セットが大きい場合は、 use_result()を優先し、上記のプロセスを厳密に遵守することをお勧めします。

より実用的なスキルについては、当社のWebサイトhttps://gitbox.net/php-tipsをご覧ください。