我打算做一个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