2024 PHP 日本研討會

mysqli_result::free

mysqli_result::close

mysqli_result::free_result

mysqli_free_result

(PHP 5, PHP 7, PHP 8)

mysqli_result::free -- mysqli_result::close -- mysqli_result::free_result -- mysqli_free_result釋放與結果集關聯的記憶體

說明

物件導向風格

public mysqli_result::free(): void
public mysqli_result::close(): void
公開 mysqli_result::free_result(): void

程序式風格

mysqli_free_result(mysqli_result $result): void

釋放與結果集相關聯的記憶體。

參數

result

僅限程序式風格:由 mysqli_query()mysqli_store_result()mysqli_use_result()mysqli_stmt_get_result() 返回的 mysqli_result 物件。

返回值

無返回值。

參見

新增註釋

使用者貢獻的註釋 3 則註釋

jack_action100 at hotmail dot example dot com
5 年前
如果您即使在釋放結果後仍然收到此錯誤:
內部 SQL 錯誤:2014,命令不同步;您現在無法執行此命令

您的查詢中可能包含預存程序。預存程序可以返回多個結果集,並且它總是會返回一個額外的空結果集,其中包含一些關於預存程序調用本身的元資訊,尤其是錯誤資訊。(來源:https://bugs.mysql.com/bug.php?id=71044

在使用 mysqli->query("CALL `stored_procedure`();") 調用單個預存程序(其中包含一個 SELECT)時,我必須執行以下操作才能使其在兩次調用之間正常工作:

<?php
$result
->free();
$mysqli->next_result();
?>

如果您沒有調用預存程序,則它沒有負面影響。
polygon dot co dot in at gmail dot com
3 年前
我們應該分別使用 mysqli_free_result 釋放 mysql 結果,否則這將消耗您的伺服器 RAM 資源。

如下所示:

<?php

$link
= mysqli_connect('Hostname','Username','Password','Database');

echo
'<br/>查詢前記憶體用量 = '.memory_get_usage(false); // 449464 bytes

$resultResource = mysqli_query($link, 'SELECT * FROM test');

echo
'<br/>查詢後記憶體用量 = '.memory_get_usage(false); // 466528 bytes

$result = array();
while (
$result[] = mysqli_fetch_assoc($resultResource)) {}

echo
'<br/><br/>釋放結果前記憶體用量 = '.memory_get_usage(false); // 474208 bytes

mysqli_free_result($resultResource);

echo
'<br/>釋放結果後記憶體用量 = '.memory_get_usage(false); // 457336 bytes

?>

以下為輸出結果。

查詢前記憶體用量 = 449464
查詢後記憶體用量 = 466528

釋放結果前記憶體用量 = 474208
釋放結果後記憶體用量 = 457336

因此,可以觀察到查詢執行後有記憶體用量。查詢執行完成後,資料庫伺服器會立即將結果返回到網路伺服器。然後處理網路伺服器上的結果,以便從網路伺服器上的資源連結中擷取。

此外,還觀察到使用 mysqli_free_result 後記憶體用量較少,因為通過提供相應的資源連結釋放了網路伺服器上儲存的相應查詢資源。
Vector at ionisis dot com
14 年前
如果您收到此錯誤
內部 SQL 錯誤:2014,命令不同步;您現在無法執行此命令

那麼您從未在腳本中呼叫 mysqli_result::free()、mysqli_result::free_result()、mysqli_result::close() 或 mysqli_free_result(),並且必須在執行另一個預存程序之前呼叫它。
To Top