PDO 循环并打印 fetchAll

Posted

技术标签:

【中文标题】PDO 循环并打印 fetchAll【英文标题】:PDO looping through and printing fetchAll 【发布时间】:2010-12-03 22:35:55 【问题描述】:

我无法从 fetchAll 获取数据以选择性地打印。

在普通的mysql中我是这样做的:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs))
   $id = $row['id'];
   $n = $row['n'];
   $k = $row['k'];

在 PDO 中,我遇到了麻烦。我绑定了参数,然后像上面一样将获取的数据保存到 $rs 中,目的是以相同的方式循环它..

$sth->execute();
$rs = $query->fetchAll();

现在问题来了。我该怎么做才能获得与上面的while循环匹配的东西?!我知道我可以使用 print_r() 或 dump_var,但这不是我想要的。我需要做以前可以用常规 mysql 做的事情,比如根据需要单独获取 $id、$n、$k。有可能吗?

提前谢谢..

【问题讨论】:

【参考方案1】:

应该是

while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
  $id = $row['id'];
  $n = $row['n'];
  $k = $row['k'];

如果你坚持fetchAll,那么

$results = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($results as $row) 
   $id = $row['id'];
   $n = $row['n'];
   $k = $row['k'];

PDO::FETCH_ASSOC 仅获取列名并省略数字索引。

【讨论】:

非常感谢您的帮助。我选择了 2,因为在循环之前我也必须计算它。所以将它存储在 $results 之前更有意义。 $query->rowCount() 可能返回计数。 它不适用于 SELECT 语句。看到这个问题:***.com/questions/460010/… 你在这一行多了一个右括号:$results = $query->fetchAll(PDO::FETCH_ASSOC)); while 循环没有显示任何内容,至少它也没有中断进程。 foreach 循环显示结果(我使用了一个虚拟查询SHOW TABLES,这应该不是问题)。我对 foreach 解决方案很好,只是想知道为什么。

以上是关于PDO 循环并打印 fetchAll的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用pdo连接access数据库并循环显示数据操作示例

PHP:PDO foreach 不起作用

循环更新查询 pdo where id

使用 PDO 驱动程序 PHP 在 sql-server 查询中循环

PDO::fetchAll 与 PDO::fetch 循环

为啥连接失败时 PDO 会打印我的密码?