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

mysql_unbuffered_query 與 mysql_query 差異解析:為何前者不支持 mysql_data_seek()?

     編輯:MySQL 綜合教學

mysql_unbuffered_query vs mysql_query:核心差異與限制

PHP 早期 MySQL 擴展(已棄用)中,兩種查詢模式的根本區別在於結果集緩衝策略:

mysql_query(緩衝模式)

  • 一次性將全部結果集從 Server 讀取到客戶端記憶體。
  • 支援 mysql_data_seek()、mysql_num_rows()、隨機存取行。
  • 適用於小/中型結果集,記憶體佔用大。

mysql_unbuffered_query(非緩衝/流式模式)

  • 按需從 Server 逐行讀取,不在客戶端緩存全部結果。
  • 不支援 mysql_data_seek()、mysql_num_rows()(需遍歷計數)。
  • 適用於大結果集、記憶體受限場景,但讀取期間不能執行其他查詢(同一連接)。

代碼示例:data_seek 失敗場景

$result = mysql_unbuffered_query($sql, $conn);
mysql_data_seek($result, 0); // 警告:不能在 unbuffered 結果上使用

現代替代方案

PHP 5.5+ 棄用 mysql_* 函數,請改用 PDO 或 mysqli:

  • PDO:PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 控制緩衝模式。
  • mysqli:mysqli::use_result()(非緩衝)vs mysqli::store_result()(緩衝)。

總結

特性mysql_querymysql_unbuffered_query
記憶體佔用高(全量緩存)低(流式)
隨機存取支援不支援
併發查詢同一連接可執行其他查詢讀取期間阻塞其他查詢
適用場景小結果集、需多次遍歷大結果集、單次順序讀取
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved