當前位置: 首頁> 最新文章列表> 如何在next_result() 前使用use_result() 獲取結果集

如何在next_result() 前使用use_result() 獲取結果集

gitbox 2025-04-29

在使用PHP 操作MySQL 的多語句查詢時,常會用到multi_query()配合next_result()來遍歷多個結果集。而在調用next_result()前,正確地使用use_result()是確保結果不被遺漏或錯誤處理的關鍵步驟。本文將介紹其正確用法,並給出一個完整的代碼示例。

為什麼需要use_result()

在執行多語句查詢後,MySQL 會返回多個結果集。 PHP 提供了兩種方式來獲取結果集: 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() :每個結果集只能用一次use_result() ,否則會報錯。

  2. 釋放資源:處理完結果後,一定要調用$result->free()來釋放內存。

  3. 錯誤檢查use_result()可能返回false ,應加以判斷。

結語

掌握use_result()next_result()的正確使用順序,不僅有助於你在處理多語句查詢時避免常見的邏輯錯誤,還能提高程序的健壯性。如果你在項目中需要調用多個SQL 查詢,並且結果集較大,推薦優先考慮use_result() ,並嚴格遵守上述流程。

如需了解更多實戰技巧,可以訪問我們的網站: https://gitbox.net/php-tips