首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL mysql_free_result() 函數:釋放結果集記憶體的正確姿勢

     編輯:MySQL 綜合教學

函數作用與語法

注意: 屬已棄用 `mysql` 擅展。新代碼使用 `mysqli_free_result()` 或 `PDOStatement::closeCursor()`。

bool mysql_free_result ( resource $result )
  • 成功返回 true,失敗返回 false。
  • 參數 `$result` 來自 `mysql_query()` 返回的結果集資源。
  • 何時需要手動調用?

    • 大結果集: 查詢返回數十萬行以上,佔用大量 PHP 記憶體。
    • 長運行腳本: CLI 腳本、守護進程、批量處理任務,多次查詢累積記憶體。
    • 記憶體受限環境: 共享主機、小內存容器。

    腳本結束時會自動釋放所有資源,短生命周期 Web 請求通常無需手動調用。

    代碼範例

    $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_close($con);
    

    現代替代寫法

    mysqli(面向對象)

    $result = $mysqli->query("SELECT * FROM big_table");
    while ($row = $result->fetch_assoc()) { /* ... */ }
    $result->free(); // 釋放結果集
    

    PDO

    $stmt = $pdo->query("SELECT * FROM big_table");
    while ($row = $stmt->fetch()) { /* ... */ }
    $stmt->closeCursor(); // 釋放游標,允許執行下一條語句
    

    常見誤區

    • 以為 `mysql_free_result()` 能斷開連接 —— 錯,僅釋放結果集記憶體,連接需 `mysql_close()`。
    • 所有查詢後都調用 —— 多數情況下屬於過度優化,增加代碼複雜度。
    • 混淆 `mysql_free_result()` 與 `mysql_close()` 的調用順序 —— 先釋放結果集,再關閉連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved