2013-02-27 2 views
2
$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?Сбросить положение курсора в PDO

+1

Если вам не нужно дважды извлекать данные, почему вы хотите сбросить положение курсора, то? –

+0

@YourCommonSense Конечно, вы пропустили мою мысль. Я хотел знать, как сбросить курсор в PDO. что Downvote не оправдался вообще. – varuog

ответ

6

AFAIK нет возможности сбросить позицию курсора с помощью PDO - это может быть связано с совместимостью с некоторыми базами данных, которые не поддерживают сброс внутренних курсоров.

Если вы хотите, чтобы два раза итерации по результатам, принесите его в массив и перебирать этот массив:

<?php 
$results = $stmt->fetchAll(); 
foreach($results as $row) { 
    // first 
} 

foreach($results as $row) { 
    // second 
} 

Редактировать Некоторые базы данные поддерживают прокрутку. Для этого добавьте флаг PDO::CURSOR_SCROLL в prepare (см. Примеры на PDOFetch documentation page). Но это только добавляет возможность двигаться вперед или назад, а не полностью перематывать. Кроме того, не все базы данных поддерживают этот тип курсора (например, MySQL не работает).

+0

есть что-нибудь вроде http://www.php.net/manual/en/function.mysql-field-seek.php для использования с PDO? – varuog

+1

Вы можете использовать дополнительные аргументы для '' PDOStatement :: fetch'' с флагом '' PDO :: FETCH_ORI_ABS'', как указано выше, но это не будет работать с MySQL, как описано здесь https://bugs.php.net /bug.php?id=34625 – leafnode

+0

@fallenAngel Mysql не поддерживает курсоры. Поэтому даже PDO поддерживает их, если они доступны, вы не можете использовать их с Mysql. http://stackoverflow.com/questions/12044636/php-pdo-mysql-scrollable-cursor-doesnt-work – djot