AFAIK não há possibilidade de redefinir a posição do cursor com o PDO - isso pode ter algo a ver com a compatibilidade com alguns bancos de dados, que não suportam a redefinição de cursores internos.
Se você quiser iterar duas vezes sobre os resultados, busque-o no array e itere sobre este array:
<?php
$results = $stmt->fetchAll();
foreach($results as $row) {
// first
}
foreach($results as $row) {
// second
}
Editar Alguns bancos de dados suportam cursores roláveis. Para usar isso, adicione
PDO::CURSOR_SCROLL
sinalizar para prepare
método (veja exemplos na página de documentação do PDOFetch
). Mas isso só adiciona a possibilidade de avançar ou retroceder, não retroceder completamente. Além disso, nem todos os bancos de dados suportam esse tipo de cursor (por exemplo, o MySQL não).