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

Joh*_*ohn 2 php mysql pdo

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

foreach($dbh->query("SELECT * FROM ...") as $row) { 
  ...do something with row()
Run Code Online (Sandbox Code Playgroud)

但是当我var_dump $dbh它是一个PDOstatement对象.

这引出了两个问题:

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

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

Ali*_*aru 7

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

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


pro*_*son 5

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