2024 年 PHP Conference Japan

mysql_unbuffered_query

(PHP 4 >= 4.0.6, PHP 5)

mysql_unbuffered_query傳送 SQL 查詢到 MySQL 而不擷取和緩衝結果列

警告

此擴充自 PHP 5.5.0 起已被棄用,並在 PHP 7.0.0 中移除。建議改用 MySQLiPDO_MySQL 擴充。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:

說明

mysql_unbuffered_query(字串 $query, 資源 $link_identifier = NULL): 資源

mysql_unbuffered_query() 將 SQL 查詢 query 送到 MySQL,但不像 mysql_query() 那樣自動擷取並緩衝結果列。對於產生大量結果集的 SQL 查詢,這可以節省相當多的記憶體,而且您可以在擷取第一列後立即開始處理結果集,而不必等到整個 SQL 查詢執行完畢。要在多個資料庫連線開啟時使用 mysql_unbuffered_query(),您必須指定可選參數 link_identifier 來識別您要使用的連線。

參數

query

要執行的 SQL 查詢。

查詢中的資料應該正確地跳脫

link_identifier

MySQL 連線。如果未指定連線識別碼,則假設使用由 mysql_connect() 開啟的最後一個連線。如果找不到此類連線,它將嘗試建立一個連線,如同以無參數呼叫 mysql_connect() 一樣。如果找不到或建立連線,則會產生 E_WARNING 等級的錯誤。

傳回值

對於 SELECT、SHOW、DESCRIBE 或 EXPLAIN 陳述式,mysql_unbuffered_query() 在成功時傳回 資源,在錯誤時傳回 false

對於其他類型的 SQL 陳述式,例如 UPDATE、DELETE、DROP 等,mysql_unbuffered_query() 在成功時傳回 true,在錯誤時傳回 false

注意事項

注意:

mysql_unbuffered_query() 的好處是有代價的:您不能在從 mysql_unbuffered_query() 傳回的結果集上使用 mysql_num_rows()mysql_data_seek(),直到擷取所有列為止。您還必須從未緩衝的 SQL 查詢中擷取所有結果列,才能使用相同的 link_identifier 向 MySQL 傳送新的 SQL 查詢。

另請參閱

新增註釋

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

3
frappyjohn at dos2linux dot org
21 年前
別被兩種說法搞混了,這些都是優點(它們其實應該是一體兩面)

一方面,這對於產生大量結果集的 SQL 查詢可以節省相當多的記憶體。

另一方面,您可以立即開始處理結果集……
3
crazyone at crazycoders dot net
16 年前
使用無緩衝查詢時,您並非一定要讀取結果集中的所有列,您可以隨時選擇退出並使用 mysql_free_result。想像一下,當前 50 列資料就足夠時,卻要查看 100 萬列?只需釋放結果集,您就可以繼續進行其他操作了。
0
post at jfl dot dk
21 年前
如果使用優化的 MyISAM 資料表,我猜這個函式有個很大的優點,那就是只要資料表中的任何列沒有被更新,就可以同時執行 SELECT 和 INSERT 操作。
To Top