2014-09-10 26 views
0

下面是我的代碼如何將多個查詢的結果添加到PDO中的數組?

$stmt = $db->prepare("SELECT * FROM inbox ORDER BY `date` DESC "); 
$stmt->execute(array()); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);   

$uniques = count(array_unique($row, SORT_REGULAR)); 

for ($i=0; $i < $uniques; $i++) { 

    $inbox_id = $row[$i]["inbox_id"]; 

    $stmt = $db->prepare("SELECT * FROM messages WHERE inbox_id=? AND seen=? ORDER BY `date` DESC"); 
    $stmt->execute(array($inbox_id, 0)); 
    $row_msg = $stmt->fetchAll(PDO::FETCH_ASSOC);     
} 

return $row_msg; 

但這也不返回所有data.It只返回值只從第一次迭代得到。

+0

U mean:$ row_msg []? – Naruto 2014-09-10 12:47:38

+0

它不起作用 – 2014-09-10 12:56:34

+0

您正在循環播放每個唯一的收件箱結果,然後每次覆蓋'$ row_msg'。 '$ row_msg'應該是一個多維數組。 – bcmcfc 2014-09-10 12:59:55

回答

2

你可以使用:

$row_msg[$i] = $stmt->fetchAll(PDO::FETCH_ASSOC); 
+0

do print_r($ row_msg);並看看它有什麼。 – 2014-09-10 12:58:18

+0

是的,我做到了這一點,並發現多維數組。即使我得到一些取消的未定義偏移錯誤。 – 2014-09-10 13:04:12

+0

然後是什麼問題。 – 2014-09-10 13:04:56

0

你的PDO語句準備每一輪的循環中,這是沒有必要的,我希望inbox_id列在收件箱表的主鍵:

$stmt1 = $db->query("SELECT `inbox_id` FROM inbox ORDER BY `date` DESC "); 
$stmt2 = $db->prepare("SELECT * FROM messages WHERE inbox_id=? AND seen=0 ORDER BY `date` DESC"); 
while($id = $stmt1->fetchColumn(0)) { 
    $stmt2->execute(array($id)); 
    $row_msg[$id] = $stmt2->fetchAll(PDO::FETCH_ASSOC); 
}  
return $row_msg; 

如果你不想要一個多維數組,你可以通過在循環內使用array_merge()(PHP Manual: array_merge)(而不是$ row_msg [$ id])的行來將行添加到結果數組中:

$row_msg = array_merge($row_msg, $stmt2->fetchAll(PDO::FETCH_ASSOC));

+0

好的,然後如何更改此代碼相應的回聲消息.http://pastebin.com/BqCkrdXY – 2014-09-10 14:43:36

+0

輸出消息實際上不是問題的一部分。如果你沒有做到這一點,你應該首先學習基本的數組操作,特別是PHP中的循環。 如果多維: foreach($ row_msg as $ id => $ msgs){ foreach($ msgs as $ msg){ echo $ msg ['msg']; } } if not multidimansional: foreach($ row_msg as $ msg){ echo $ msg ['msg']; } – JHoffmann 2014-09-10 18:17:54

相關問題