PHP:PDO foreach 不起作用
Posted
技术标签:
【中文标题】PHP:PDO foreach 不起作用【英文标题】:PHP: PDO foreach don't work 【发布时间】:2016-05-23 15:51:11 【问题描述】:我将做一个 foreach 循环来使用这个来打印数组值:
$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();
foreach($query as $row)
var_dump($row);
但foreach循环似乎没有执行,我的err.log中没有任何内容
有人可以帮忙吗?
【问题讨论】:
你需要获取结果 execute() 的返回类型不可能为空。我确定您需要对execute()返回的任何内容进行foreach; 示例:php.net/manual/en/pdostatement.fetchall.php 【参考方案1】:两种选择:
$query = $db->prepare("SELECT * FROM products WHERE category = 1");
$query->execute();
while($row = $query->fetch())
var_dump($row);
Fetch() 一次返回一行,因此您必须执行一个 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() 执行它,但您还必须检索结果,这不是自动完成的。为此,请使用 fetch() 或 fetchAll()
看看以下链接:
http://php.net/manual/en/pdostatement.fetch.php http://php.net/manual/en/pdostatement.fetchall.php
【讨论】:
+1 表示光标版本(方法 1)。如果你有 10000000 个结果,你可能不想 fetchAll.. True 取决于用例,光标版本可能是更好的选择。 @DanFromGermany,很棒的提示。不知道它对这种情况也有用。【参考方案2】:这就是 PDO 的方法:
$stmt = $db->prepare("SELECT * FROM products WHERE category = 1");
$stmt->execute();
$products = $stmt->fetchAll();
foreach($products as $product)
var_dump($product);
【讨论】:
以上是关于PHP:PDO foreach 不起作用的主要内容,如果未能解决你的问题,请参考以下文章