PHP / PDO:返回没有foreach的查询行?

时间:2010-10-13 05:42:48

标签: php mysql pdo

我对此感到困惑,我运行了一个查询,例如

foreach($dbh->query("SELECT * FROM ...") as $row) { 
  ...do something with row()

但是当我var_dump $dbh时,它是一个PDOstatement对象。

这引出了两个问题:

  • foreach如何以某种方式将对象解析为单独的行?
  • 如何将所有行存储在数组中,例如$ arr = $ dbh-> query(...)?这不起作用,因为它仍然是一个对象

我当然可以在foreach下运行,并且执行$ arr [] = $ row,但这看起来有点傻。

2 个答案:

答案 0 :(得分:7)

  1. PHP有一些有趣的接口,可以将对象作为数组处理。在这种情况下,PDOStatement类实现Traversable,这允许在其上使用foreach。见http://www.php.net/manual/en/class.pdostatement.php

  2. 要将所有结果放在一个数组中,请查看PDOStatement::fetchAll。如果遇到问题,也可以考虑在php.net上检查PHP文档。它包含了示例和有用的用户注释。

答案 1 :(得分:5)

使用PDOStatement::fetchAll()将整个结果集作为数组。就PDO内部做的而言,它使用迭代器来访问记录集的某些表示。这样你就可以使用更少的内存,因为你没有将整个结果集拉到php中,而是使用类似于实现内部的resource的东西。