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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO MySQL可滚动游标不起作用

PHP MySql PDO 多次插入不起作用

php pdo 请求对给定值不起作用的地方?

在 php 7.2 中启用 pdo_sqlsrv,不起作用

使用 PDO 连接 Mysql 数据库不起作用

使用php pdo选择原始计数不起作用[重复]