當我對數據庫進行查詢並在mysqli_result中檢索結果時,內存使用量非常小。但是,當我將查詢結果中的所有行提取到關聯數組時,內存使用率變得非常高。PHP:如何將查詢結果存儲在mysqli_result中
<?php
require_once("../config.php"); //db connection config
$db = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DBASE);
$query ="select * from table_name";
if($r = $db->query($query)){
echo "MEMORY USAGE before : ". memory_get_usage()."<br><br>";
$rows = array();
while($row = $r->fetch_assoc()){
$rows[]= $row;
}
echo "MEMORY USAGE after : ". memory_get_usage()."<br><br>";
//before: 660880
//after: 114655768
// # of records: around 30 thousands
?>
這是有道理的,我認爲這個存儲許多成果是非常耗費內存,但我只是想知道如何來mysqli_result是如此之小。每次調用fetch_assoc時,都不能將結果查詢到dbase。那麼結果存儲在內存的哪裏呢?
我在某處讀到'mysql_ *'函數一次從服務器獲取所有結果行。然而,PDO(並可能是mysqli)按需檢索每一行。所以每次打電話時,你都會用盡一點記憶。但是你將每一行存儲在一個數組中,所以你的內存使用情況將會積累起來。 – 2012-07-29 03:29:45
你的意思是說,每次調用訪存,mysqli都會查詢數據庫中的結果嗎? – spchuang 2012-07-29 03:31:46
根據我的理解,當你調用query()時,MySQL執行查詢並準備將所有結果行返回給PHP。但是,如果mysqli與PDO(至少是PDO的默認值)類似,那麼在調用fetch之前它不會開始接收行。除非您調用'fetchAll()',否則每行將檢索一行。這意味着你的內存使用情況是因爲你將結果保存在一個數組中,而不是因爲mysqli。 – 2012-07-29 03:34:31