2013-08-12 70 views
0

時允許內存耗盡我有2個腳本這在技術上是相同的,但一個工作,另一個產生錯誤:PHP PDO分配64個字節

(!) Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 64 bytes) in C:\wamp\www\SOTag\SOTag.php on line 29 

線29感:

$rows[] = $r; 

這是工作的代碼:

$this->connect_db(); 
$statement = $this->db_connection->prepare("SELECT * FROM tags WHERE tag LIKE :keywords"); 
$statement->bindParam(':keywords', $keywords, PDO::PARAM_INT); 
$statement->execute(compact('keywords')); 

$rows = array(); 
while($r = $statement->fetch(PDO::FETCH_ASSOC)) { 
    $rows[] = $r; 
} 
return json_encode($rows); 

而這正是我需要做的(因爲我需要檢查的結果),但它失敗:

$this->connect_db(); 
$statement = $this->db_connection->prepare("SELECT * FROM tags WHERE tag LIKE :keywords"); 
$statement->bindParam(':keywords', $keywords, PDO::PARAM_INT); 
$statement->execute(compact('keywords')); 
$result = $statement->fetch(PDO::FETCH_ASSOC); 

$rows = array(); 
while($r = $result) { 
    $rows[] = $r; 
} 
return json_encode($rows); 
+0

爲什麼你使用'而($ R =而($ R = $ statement-> fetch(PDO :: FETCH_ASSOC)){'? –

+0

對不起,我會編輯 – Adam

+0

你確定你的第一個片段有效嗎? –

回答

1
在你的代碼

太多的錯誤,它更容易把它改寫:

$statement = $this->db_connection->prepare("SELECT * FROM tags WHERE tag LIKE ?"); 
$statement->execute(array($keywords)); 
$rows = $statement->fetchAll(); 
return json_encode($rows); 
1

您已經創建了一個無限循環:

$rows = array(); 
while($r = $result) { 
    $rows[] = $r; 
} 

PHP只是阻止你從整個服務器崩潰。

1

while($r = $result) {是問題所在。

$result總是被評估爲真,所以循環不會停止。

你必須這樣做:

while($r = $statement->fetch(PDO::FETCH_ASSOC)) { 
+0

好吧,所以我想我需要問,如何在不執行查詢兩次的情況下檢查結果? – Adam

+0

@Adam爲什麼要執行查詢兩次? 'fetch'不執行查詢。 – xdazz

+0

哦,對不起,我是在假設它 – Adam

相關問題