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->query("SELECT * FROM names")
是一个PDOStatement
对象。
foreach
如何循环通过PDOStatement
对象?它会将PDOStatement
对象转换为关联数组吗?为什么这部分:$db->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的主要内容,如果未能解决你的问题,请参考以下文章
foreach 循环中的逗号分隔变量到 php 脚本中的 xml 行