我对此感到困惑,我运行了一个查询,例如
foreach($dbh->query("SELECT * FROM ...") as $row) {
...do something with row()
但是当我var_dump $dbh
时,它是一个PDOstatement对象。
这引出了两个问题:
我当然可以在foreach下运行,并且执行$ arr [] = $ row,但这看起来有点傻。
答案 0 :(得分:7)
PHP有一些有趣的接口,可以将对象作为数组处理。在这种情况下,PDOStatement
类实现Traversable
,这允许在其上使用foreach
。见http://www.php.net/manual/en/class.pdostatement.php
要将所有结果放在一个数组中,请查看PDOStatement::fetchAll。如果遇到问题,也可以考虑在php.net上检查PHP文档。它包含了示例和有用的用户注释。
答案 1 :(得分:5)
使用PDOStatement::fetchAll()
将整个结果集作为数组。就PDO内部做的而言,它使用迭代器来访问记录集的某些表示。这样你就可以使用更少的内存,因为你没有将整个结果集拉到php中,而是使用类似于实现内部的resource
的东西。