Есть следующий код:
<?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
давать ошибки?
PDOStatement
инвентарь Traversable
интерфейс, что означает, что он может быть использован внутри foreach
петля.
Других решений пока нет …