2010-10-13 56 views
2

我感到困惑这个问题,我运行一个查询,如PHP/PDO:返回没有foreach的查询行?

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

但是,当我的var_dump $dbh它是一个PDOStatement对象的对象。

这使我两个问题:

  • 怎样的foreach某种程度上解决对象在不同的​​行?
  • 如何将所有行存储在数组中,如$ arr = $ dbh-> query(...)?这不起作用,因为它仍然是一个对象

我可以在foreach当然下运行,也$常用3 [] = $行,但似乎有点傻..

+0

不,'$ arr [] = $ row;'不傻。这是正常的,顺序的方式。 PDO有一个现成的辅助功能,可以一次完成它,但你也可以自己做同样的功能。没什么大不了的。 – 2010-10-13 05:57:09

回答

5

使用PDOStatement::fetchAll()到将整个结果集作为数组获取。就PDO在内部执行什么而言,它使用迭代器来访问记录集的某种表示形式。这样你使用较少的内存,因为你不会把整个结果集拉到php中,你使用的东西类似于实现内部的一个resource

7
  1. PHP有一些有趣的接口,可以让你以数组的形式处理对象。在这种情况下,PDOStatement类实现了Traversable,这允许在其上使用foreach。请看这里http://www.php.net/manual/en/class.pdostatement.php

  2. 要在一个阵列中获得所有结果,请查看PDOStatement::fetchAll。如果遇到问题,还可以考虑在php.net上检查PHP文档。它包含了很多示例和有用的用户评论。