4
$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
}

データを 2 回取得する必要がないことはわかっています。しかし、私の主な質問は、PDO でカーソル位置をリセットする方法ですか?

4

1 に答える 1

8

私の知る限り、PDO でカーソル位置をリセットする可能性はありません。これは、内部カーソルのリセットをサポートしていない一部のデータベースとの互換性に関係している可能性があります。

結果を 2 回繰り返したい場合は、結果を配列にフェッチし、この配列を繰り返し処理します。

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

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

編集一部のデータベースはスクロール可能なカーソルをサポートしています。これを使用するには、PDO::CURSOR_SCROLLフラグをprepareメソッドに追加します ( PDOFetch ドキュメント ページの例を参照してください)。しかし、それは完全に巻き戻すのではなく、前後に移動する可能性を追加するだけです. また、すべてのデータベースがそのタイプのカーソルをサポートしているわけではありません (たとえば、MySQL はサポートしていません)。

于 2013-02-27T12:09:52.280 に答える