在 PHP 操作 MySQL 時,大結果集佔用大量內存是常見性能隱患。mysql_free_result() 函數用於顯式釋放查詢結果集佔用的內存資源。本文詳細講解函數語法、參數、返回值、自動釋放機制與實戰代碼範例。
bool mysql_free_result(resource $result)
$result — 由 mysql_query() 返回的結果集資源標識符(僅適用於 SELECT、SHOW、EXPLAIN、DESCRIBE 等返回結果集的語句)。true,失敗返回 false。mysql_free_result($result) 立即釋放該結果集佔用的內存。<?php
$con = mysql_connect("localhost", "peter", "abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db("test_db", $con);
// 第一次查詢
$sql = "SELECT * FROM Person";
$result = mysql_query($sql, $con);
print_r(mysql_fetch_row($result));
// 【關鍵】釋放第一次查詢結果集內存
mysql_free_result($result);
// 第二次查詢(若不釋放,兩結果集內存疊加)
$sql = "SELECT * FROM Customers";
$result = mysql_query($sql, $con);
print_r(mysql_fetch_row($result));
mysql_free_result($result); // 良好習慣:用完即釋
mysql_close($con);
?>
mysql_* 系列函數**已棄用(PHP 5.5+)並移除(PHP 7.0+)**。新專案請使用 mysqli_free_result() 或 PDOStatement::closeCursor()。mysql_unbuffered_query()(mysqli 對應 MYSQLI_USE_RESULT 模式)。LIMIT offset, count 分批獲取,從源頭控制結果集大小。mysql_free_result() 是釋放結果集內存的顯式手段,雖有自動回收機制,但在長腳本、大數據量場景下**主動釋放是優化內存曲線的關鍵習慣**。現代開發請遷移至 mysqli/PDO 並使用對應釋放方法。