2017-09-17 55 views
1

我試圖獲取MySQL表的所有行。這裏是代碼:PDO在選擇大量記錄時失敗

$sql = "SELECT * FROM my_table"; 
$connection = new 
PDO('mysql:host=localhost;dbname=dbname;charset=utf8','user', 'password'); 
$statement =$connection->prepare($sql); 
$statement->execute(); 
$result = $statement->fetchAll(PDO::FETCH_ASSOC); 

my_table表有145列和11000記錄。 當我運行代碼時,它無法獲取所有記錄。但是,當我將$ sql更改爲SELECT ID FROM my_tableSELECT * FROM my_table LIMIT 4000時,它會成功運行。

PDO提取數據是否有任何限制或我濫用?

SLUTION

檢查Apache的錯誤日誌後,我看到了這個錯誤:apache weAllowed memory size of 134217728 bytes exhausted。 AS @Marcin Orlowski在評論中表示這是一個記憶問題。所以我應該選擇需要的列並使用where子句來過濾我的記錄。

+0

是的 - 記憶。檢查你的錯誤日誌。 – zerkms

+1

除了你很可能在這裏獲取的內存問題,我真的懷疑你需要所有11000行的提取。這通常表明你應該停下來坐下來重新思考你真正在做什麼和爲了什麼。 –

+0

我的歉意。我甚至沒有考慮檢查錯誤日誌。這樣一個愚蠢的問題。我花了一天的時間在Google上搜索。 – Beginner

回答

0

您應該添加foreach選項來正確獲取它。 只是按照以下方式回顯行列以顯示那裏的任何列。

<?php 
$connection = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8','user', 'password'); 
$sql = "SELECT * FROM `my_table`"; 
$statement =$connection->prepare($sql); 
$statement->execute(); 
$result1 = $statement->fetchAll(PDO::FETCH_ASSOC); 
//Re written by Ajmal PraveeN 
foreach($result1 as $result){ 
echo $result['column']; 
echo $result['column2']; 
} 
?> 
+0

這一行失敗。 '$ result1 = $ statement-> fetchAll(PDO :: FETCH_ASSOC);'。所以不可能循環遍歷行。 – Beginner