2016-02-12 30 views
1

我打算做一個foreach循環使用此打印的數組值:PHP:PDO的foreach不工作

$query = $db->prepare("SELECT * FROM products WHERE category = 1"); 
$query->execute(); 

foreach($query as $row) { 
var_dump($row); 
} 

但在foreach循環似乎沒有執行,沒有什麼在我犯錯.log

有人可以幫忙嗎?

+2

你需要獲取結果 – RamRaider

+0

執行(的返回類型)不能可能是無效的。我相信你需要對execute()返回的內容進行foreach。 – Glubus

+0

示例:http://php.net/manual/en/pdostatement.fetchall.php – Clyff

回答

5

兩個選項:

$query = $db->prepare("SELECT * FROM products WHERE category = 1"); 
$query->execute(); 

while($row = $query->fetch()){ 
    var_dump($row); 
} 

取()一次返回一行,所以你必須做一個while循環來獲取所有結果。

或者

$query = $db->prepare("SELECT * FROM products WHERE category = 1"); 
$query->execute(); 
$results = $query->fetchAll();  

foreach($results as $row){ 
    var_dump($row); 
} 

在上面的例子中,使用使用fetchall(),一次獲得所有行。然後你在這些行上使用foreach循環。

首先,您必須使用query()函數準備查詢。然後你必須用execute()來執行它,但是你還必須檢索結果,這不是自動完成的。要做到這一點使用取()使用fetchall()

看看下面的鏈接:

http://php.net/manual/en/pdostatement.fetch.php http://php.net/manual/en/pdostatement.fetchall.php

+2

對於遊標版本(方法1)+1。如果您有10000000個結果,那麼您可能不想獲取所有結果。 – DanFromGermany

+0

根據用例的不同,光標版本可能是更好的選擇。 – Blackbam

+0

@DanFromGermany,很棒的提示。不知道它對於這種情況也是有用的。 – Robbe

2

那如何PDO:

$stmt = $db->prepare("SELECT * FROM products WHERE category = 1"); 
$stmt->execute(); 
$products = $stmt->fetchAll(); 

foreach($products as $product) { 
var_dump($product); 
}