在使用PHP 操作MySQL 的多語句查詢時,常會用到multi_query()配合next_result()來遍歷多個結果集。而在調用next_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();
?>
只調用一次use_result() :每個結果集只能用一次use_result() ,否則會報錯。
釋放資源:處理完結果後,一定要調用$result->free()來釋放內存。
錯誤檢查: use_result()可能返回false ,應加以判斷。
掌握use_result()和next_result()的正確使用順序,不僅有助於你在處理多語句查詢時避免常見的邏輯錯誤,還能提高程序的健壯性。如果你在項目中需要調用多個SQL 查詢,並且結果集較大,推薦優先考慮use_result() ,並嚴格遵守上述流程。
如需了解更多實戰技巧,可以訪問我們的網站: https://gitbox.net/php-tips