foreach循环php中的PDOStatement

Posted

技术标签:

【中文标题】foreach循环php中的PDOStatement【英文标题】:PDOStatement in foreach loop php 【发布时间】:2017-05-16 13:15:32 【问题描述】:

有如下代码:

<?php 

    include 'connection.php'; //$db is declared here. It's a PDO object.

    foreach ($db->query("SELECT * FROM names") as $row) 
        echo $row['firstname'] . $row['lastname'] . $row['postcode'] . '<br>';
    

?>

代码按预期工作,但我不明白它背后的逻辑。

我在 php.net 上看到 PDO::query() 返回一个 PDOStatement 对象作为结果集。 所以理论上,这部分:$db-&gt;query("SELECT * FROM names") 是一个PDOStatement 对象。

foreach 如何循环通过PDOStatement 对象?它会将PDOStatement 对象转换为关联数组吗?为什么这部分:$db-&gt;query("SELECT * FROM names") as $row 没有给出错误?

【问题讨论】:

【参考方案1】:

PDOStatement 实现了Traversable 接口,这意味着它可以在foreach 循环中使用。

【讨论】:

好的,现在说得通了。但是结果集是如何存储在PDOStatement 对象中的呢?在PDOStatement 的php.net 描述中,我没有看到任何可以保存结果集值的属性。 @尤里费多罗夫 我猜是结果集被封装了对我们隐藏了,但是你可以尝试在源码中找到:github.com/php/php-src/blob/master/ext/pdo/pdo_stmt.c

以上是关于foreach循环php中的PDOStatement的主要内容,如果未能解决你的问题,请参考以下文章

PHP foreach循环中的多个索引变量

php foreach循环中的变量

foreach 循环中的逗号分隔变量到 php 脚本中的 xml 行

php 如何退出foreach 循环

使用 PHP 中的 foreach 循环将数组值转换为单个数组

php foreach怎样获取当前的循环次数