Перебор генераторов с помощью while

Я пишу оболочку 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 является объектом-генератором. Если я использую foreach, var_dump показывает данные базы данных, как и ожидалось. Разве просто невозможно пройти через генераторы, используя whileИли я где-то здесь запутался?

1

Решение

Разве невозможно перебрать генераторы, используя while, или я где-то здесь запутался?

Вы запутались;) В вашем примере кода:

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

Вы на самом деле казнить fetch() для каждой итерации цикла. С генераторами, которые вы обычно используете foreach():

foreach ($connection->fetch($sql) as $row) {
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]