1

我正在为一个新项目编写 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是一个生成器对象。如果我使用 a foreach, avar_dump按预期显示数据库数据。是根本不可能使用 遍历生成器while,还是我在这里把自己弄糊涂了?

4

1 回答 1

1

使用 while 遍历生成器是根本不可能的,还是我在这里把自己弄糊涂了?

您自己弄糊涂了;)在您的代码示例中:

while ($row = $connection->fetch($sql)) {

您实际上fetch()为循环的每次迭代执行。对于您通常使用的生成器foreach()

foreach ($connection->fetch($sql) as $row) {
于 2016-03-15T14:58:35.247 回答