我正在为一个新项目编写一个PDO包装器。 SQL的一个非常常见的模式是编写一个语句,如
while ($row = $connection->fetch($sql)) {
...
}
我的包装函数基本上是这样的:
public function fetch($query, $bindings)
{
$stmt = $this->getPdo()->prepare($query);
$stmt->execute($bindings);
$stmt->setFetchMode($this->getFetchMode());
foreach ($stmt as $record) {
yield $record;
}
}
但如果我使用while
循环调用此值,则无法使用这些值。执行var_dump
表示$row
是一个Generator对象。如果我使用foreach
,则var_dump
会按预期显示数据库数据。是否根本不可能使用while
遍历生成器,或者我在某处混淆了自己?
答案 0 :(得分:1)
是否根本不可能使用while来遍历生成器,或者我在某处混淆了自己?
您已经混淆了自己;)在您的代码示例中:
while ($row = $connection->fetch($sql)) {
您实际上为循环的每次迭代执行fetch()
。使用生成器,您通常使用foreach()
:
foreach ($connection->fetch($sql) as $row) {