PHP的中使用非緩衝模式實作查詢資料庫的方法
緩衝查詢和非緩衝查詢(Buffered and Unbuffered queries)。 PHP的查詢缺省模式是緩衝模式。也就是說,查詢資料結果會一次全部提取到記憶體裡供PHP程式處理,需要的朋友可以參考下
最近在開發一個PHP程式時遇到了下面的錯誤:
# PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
錯誤訊息顯示允許的最大記憶體已經耗盡。遇到這樣的錯誤起初讓我很詔異,但轉眼一想,也不奇怪,因為我正在開發的這個程式是要用一個foreach循環語句在一個有4萬條記錄的表裡全表搜索具有特定特徵的數據,也就是說,一次要把4萬個數據取出,然後逐一檢查每天數據。可想而知,4萬個資料全部載入到記憶體中,記憶體不爆才怪。
畢竟程式設計這麼多年,我隱約記得PHP裡提供有非一次全部載入資料的API,是像處理串流媒體那樣,隨用隨取隨丟、資料並不會累積在記憶體的查詢方法。經過簡單的搜索,果然在官方網站上找到的正確的用法。緩衝查詢和非緩衝查詢(Buffered and Unbuffered queries)。 PHP的查詢缺省模式是緩衝模式。也就是說,查詢資料結果會一次全部提取到記憶體裡供PHP程式處理。這樣給了PHP程式額外的功能,比如說,計算行數,將指標指向某一行等。更重要的是程式可以對資料集反覆進行二次查詢和過濾等操作。但這種緩衝查詢模式的缺陷就是消耗記憶體。
另外一種PHP查詢模式是非緩衝查詢,資料庫伺服器會一條一條的返回數據,而不是一次全部返回,這樣的結果就是PHP程式消耗較少的內存,但卻增加了資料庫伺服器的壓力,因為資料庫會一直等待PHP來取數據,一直到數據全部取完。
非緩衝查詢方法一: mysqli
<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); if ($uresult) { while ($row = $uresult->fetch_assoc()) { echo $row['Name'] . PHP_EOL; } } $uresult->close();
非緩衝查詢方法二: pdo_mysql
<?php $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } }
非緩衝查詢方法三: mysql
<?php $conn = mysql_connect("localhost", "my_user", "my_pass"); $db = mysql_select_db("world"); $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) { while ($row = mysql_fetch_assoc($uresult)) { echo $row['Name'] . PHP_EOL; } }
以上就是本文的全部內容,希望對大家的學習有所幫助。
相關推薦:
php、mysql查詢當天,查詢本週,查詢本月的資料實例詳解
#####################################
以上是PHP的中使用非緩衝模式實作查詢資料庫的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
