php PDOStatement fetchВсе второй раз - PullRequest
0 голосов
/ 04 марта 2011

Я не очень понимаю смысл PDOStatement, так как:

$PDO = new PDO(); 
$PDOS = $PDO->query($sql);

var_dump($PDOS->fetchAll()); //will return data 
var_dump($PDOS->fetchAll()); //empty

Есть ли параметр, который необходимо передать, чтобы во 2-й раз fetchAll возвращал данные, но без повторного выполнения SQL?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2018

У PDOStatement есть итератор.

PDOStatement::fetch() будет перебирать набор строк. При вызове fetchAll() итератор находится в последней строке.

Этот итератор движется только в 1 направлении. Единственный способ вернуться назад - снова выполнить запрос. Это характер базы данных, и PHP не должен хранить весь набор строк в памяти.

0 голосов
/ 04 марта 2011

Просто сохраните результат первого вызова fetchAll() в переменной PHP.По какой-то причине вы не можете этого сделать?

$results = $PDOS->fetchAll();

Тогда вы можете использовать $results столько, сколько вам нужно, без дополнительной нагрузки на базу данных.

...