2012-08-11 79 views
2

我必須在這裏閱讀所有類似的帖子,但仍然無法弄清楚爲什麼會發生這種情況。允許的內存大小67108864字節耗盡

我的代碼:

$stmt = $this->db->stmt_init(); 
     $stmt->prepare("SELECT Table1.id,Name,type,text,fname,lname FROM Table1, Table2 WHERE Table1.email = Table2.email AND type='text' AND Table1.Id=?"); 
     $stmt->bind_param("i", $id); 
     $stmt->bind_result($legTxtId,$legTxtName, $legTxtType, $legTxtText, $legTxtFname, $legTxtLname); 
     $stmt->execute(); 
     $results = array(); 
     while($stmt->fetch()) 
     { 
      $results[] = array(
        'legTxtId' => $legTxtId , 'legTxtName' => $legTxtName , 'legTxtType' => $legTxtType , 
        'legTxtText' => $legTxtText , 'legTxtFname' => $legTxtFname , 
        'legTxtLname' => $legTxtLname); 
     } 
     $stmt->close(); 
     return $results; 

現在我正在使用一個不同的功能是這一個之前調用完全相同的代碼即使它返回一個多領域,它工作正常。

這一個特別是只返回1行只是簡單的短文本(沒有照片或任何東西),所以它不應該失敗,導致其肯定小於64M。

任何人都可以看到什麼問題是?

+0

「表1」和「表2」中的記錄數是多少? – verisimilitude 2012-08-11 14:18:35

+0

這兩個查詢應該只返回一行atm..and第一個這是不工作的..即使我刪除第一個失敗,我知道查詢是有效的所以.. – mixkat 2012-08-11 14:20:18

+2

這些字段中的任何一個' MEDIUMTEXT','MEDIUMBLOB'或類似的東西 - 能夠存儲大量的數據?類似的問題是[最近發佈](http://stackoverflow.com/questions/11913818/php-massive-memory-usage-for-sql-query),你可能不得不切換到PDO或啓用mysqlnd使其工作。 – DCoder 2012-08-11 14:22:41

回答

1

正如在其他問題討論,似乎這兩個解決方案:

1)切換到mysqlnd連接器,因爲這沒有按」 t顯示相同的錯誤。

如果你使用yum(亞馬遜EC2服務器上EG)安裝PHP,那麼你可以從這個更改您的LAMP堆棧的設置實現,使用:

sudo yum install php-mysql php php-xml php-mcrypt php-mbstring php-cli mysql httpd 

到:

sudo yum install php-mysqlnd php php-xml php-mcrypt php-mbstring php-cli mysql httpd 

2)使用store_result或use_result,它們也不會顯示大量的內存分配問題。

切換到mysqlnd可能是一個更好的長期解決方案,它是一般寫得比現有的PHP MySQL的連接器(例如結果在MySQL的內存被複制到PHP內存之前不重複),並從默認的連接器從PHP 5.4.0起。

0

那麼爲什麼你使用while循環的一條記錄?

+1

它並不總是會成爲一個記錄..只是在這個階段我只有一個記錄。 – mixkat 2012-08-11 14:19:02

+0

添加第二條記錄並嘗試運行相同的腳本。就這樣我可以在晚上睡覺。 – 2012-08-11 14:20:22

+1

不...沒有任何更改.. – mixkat 2012-08-11 14:22:48

0

將數據移動到本地緩衝區將可能幫助:

// ... 
$stmt->prepare(...); 
$stmt->bind_param(...); 

$stmt->execute(); 
$stmt->store_result(); 

$stmt->bind_result(...); 
// ... 
相關問題