$data=$stmt->fetchAll(); //Dumping the data shows the result. It is also setting the cursor at the end while($data=$stmt->fetch()) { //Does not enters loop //If fetchAll() removes it work as usual }
Я знаю, что не нужно дважды извлекать данные. Но мой главный вопрос: как сбросить позицию курсора в PDO?
AFAIK нет возможности сбросить позицию курсора с PDO – это может быть связано с совместимостью с некоторыми базами данных, которые не поддерживают сброс внутренних курсоров.
Если вы хотите итерации дважды по результатам, выберите его в массив и выполните итерацию по этому массиву:
<?php $results = $stmt->fetchAll(); foreach($results as $row) { // first } foreach($results as $row) { // second }
Редактирование Некоторые базы данных поддерживают прокручиваемые курсоры. Чтобы использовать это, добавьте флаг PDO::CURSOR_SCROLL
для prepare
метода (см. Примеры на странице документации PDOFetch ). Но это только добавляет возможность двигаться вперед или назад, а не полностью перематывать. Кроме того, не все базы данных поддерживают этот тип курсора (например, MySQL не работает).