PHP / PDO: возвращать строки запроса без foreach? - PullRequest
2 голосов
/ 13 октября 2010

Я запутался в этом, я запускаю запрос, такой как

foreach($dbh->query("SELECT * FROM ...") as $row) { 
  ...do something with row()

Но когда я var_dump $dbh, это объект PDOstatement.

Это приводит меня к двум вопросам:

  • Как foreach каким-то образом разрешает объект в отдельные строки?
  • Как сохранить все строки в массиве, например, $ arr = $ dbh-> query (...)?Это не работает, потому что это все еще объект

Я, конечно, могу запустить под foreach и сделать $ arr [] = $ row, но это кажется немного глупым ..

Ответы [ 2 ]

7 голосов
/ 13 октября 2010
  1. В PHP есть несколько интересных интерфейсов, которые позволяют вам обрабатывать объекты как массивы.В этом случае класс PDOStatement реализует Traversable, и это позволяет использовать foreach для него.Смотрите здесь http://www.php.net/manual/en/class.pdostatement.php

  2. Чтобы получить все результаты в одном массиве, взгляните на PDOStatement :: fetchAll .А также в будущем рассмотрите возможность проверки документации PHP на php.net, если у вас возникнут проблемы.Он упакован с примерами и полезными комментариями пользователей.

5 голосов
/ 13 октября 2010

Используйте PDOStatement::fetchAll(), чтобы получить весь набор результатов в виде массива. Что касается того, что PDO делает внутри, он использует итератор для доступа к некоторому представлению набора записей. Таким образом, вы используете меньше памяти, потому что вы не вытягиваете весь набор результатов в php, вы используете нечто, похожее на resource, внутреннее для реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...