我打算做一個foreach循環使用此打印的數組值:PHP:PDO的foreach不工作
$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();
foreach($query as $row) {
var_dump($row);
}
但在foreach循環似乎沒有執行,沒有什麼在我犯錯.log
有人可以幫忙嗎?
我打算做一個foreach循環使用此打印的數組值:PHP:PDO的foreach不工作
$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();
foreach($query as $row) {
var_dump($row);
}
但在foreach循環似乎沒有執行,沒有什麼在我犯錯.log
有人可以幫忙嗎?
兩個選項:
$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
對於遊標版本(方法1)+1。如果您有10000000個結果,那麼您可能不想獲取所有結果。 – DanFromGermany
根據用例的不同,光標版本可能是更好的選擇。 – Blackbam
@DanFromGermany,很棒的提示。不知道它對於這種情況也是有用的。 – Robbe
那如何PDO:
$stmt = $db->prepare("SELECT * FROM products WHERE category = 1");
$stmt->execute();
$products = $stmt->fetchAll();
foreach($products as $product) {
var_dump($product);
}
你需要獲取結果 – RamRaider
執行(的返回類型)不能可能是無效的。我相信你需要對execute()返回的內容進行foreach。 – Glubus
示例:http://php.net/manual/en/pdostatement.fetchall.php – Clyff