2010-10-13 2 views
2

Я запутался об этом, я выполнить запрос, такие какPHP/PDO: вернуть строки запроса без foreach?

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

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

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

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

Я могу, конечно, бежать под Еогеасп, и не $ обр [] = $ строки, но это кажется немного глупо ..

+0

Нет, '$ arr [] = $ row;' не глупо. Это нормальный, порядковый путь. У PDO есть готовая вспомогательная функция, чтобы сделать это сразу, но вы можете сделать одну и ту же функцию самостоятельно. Не ахти какое дело. –

ответ

5

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

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

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

Смежные вопросы