Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/PDO:返回没有foreach的查询行?_Php_Mysql_Pdo - Fatal编程技术网

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

PHP/PDO:返回没有foreach的查询行?,php,mysql,pdo,Php,Mysql,Pdo,我对此感到困惑,我运行了一个查询,如 foreach($dbh->query("SELECT * FROM ...") as $row) { ...do something with row() 但是当我使用var_dump$dbh时,它是一个PDOstatement对象 这就引出了两个问题: foreach如何将对象分解为单独的行 如何将所有行存储在一个数组中,比如$arr=$dbh->query(…)?这不起作用,因为它仍然是一个对象 当然,我可以在foreach下运行,并

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

foreach($dbh->query("SELECT * FROM ...") as $row) { 
  ...do something with row()
但是当我使用var_dump
$dbh
时,它是一个PDOstatement对象

这就引出了两个问题:

  • foreach如何将对象分解为单独的行
  • 如何将所有行存储在一个数组中,比如$arr=$dbh->query(…)?这不起作用,因为它仍然是一个对象
当然,我可以在foreach下运行,并执行$arr[]=$row,但这似乎有点愚蠢。

将整个结果集用作数组。就PDO在内部的工作而言,它使用迭代器访问记录集的某些表示形式。通过这种方式,您可以使用更少的内存,因为您没有将整个结果集拉入php,而是使用类似于实现内部的
资源

  • PHP有一些有趣的接口,可以将对象作为数组处理。在这种情况下,
    PDOStatement
    类实现了
    Traversable
    ,这允许对其使用
    foreach
    。看这里

  • 要在一个数组中获得所有结果,请查看。在将来,如果遇到问题,请考虑在PHP.NET上检查PHP文档。里面有很多例子和有用的用户评论


  • 否,
    $arr[]=$row并不愚蠢。这是正常的,有序的方式。PDO有一个现成的helper函数可以立即执行,但您也可以自己创建相同的函数。没什么大不了的。