2016-02-12 95 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); 
}