Я пишу оболочку 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
Или я где-то здесь запутался?
Разве невозможно перебрать генераторы, используя while, или я где-то здесь запутался?
Вы запутались;) В вашем примере кода:
while ($row = $connection->fetch($sql)) {
Вы на самом деле казнить fetch()
для каждой итерации цикла. С генераторами, которые вы обычно используете foreach()
:
foreach ($connection->fetch($sql) as $row) {
Других решений пока нет …