PDOStatement ($usersにあります )はフォワードカーソルです。つまり、一度消費されると(最初のforeach 反復)、結果セットの先頭に巻き戻されません。
foreachの後でカーソルを閉じることができます ステートメントを再度実行します:
$users = $dbh->query($sql);
foreach ($users as $row) {
print $row["name"] . " - " . $row["sex"] . "<br/>";
}
$users->execute();
foreach ($users as $row) {
print $row["name"] . " - " . $row["sex"] . "<br/>";
}
または、調整されたCachingIteratorを使用してキャッシュすることもできます フルキャッシュを使用する場合:
$users = $dbh->query($sql);
$usersCached = new CachedPDOStatement($users);
foreach ($usersCached as $row) {
print $row["name"] . " - " . $row["sex"] . "<br/>";
}
foreach ($usersCached as $row) {
print $row["name"] . " - " . $row["sex"] . "<br/>";
}
CachedPDOStatementを見つけます 要旨としてのクラス
。キャッシュイテレータは、PDOStatementのすべてのプロパティとメソッドを引き続き提供するため、結果セットを配列に格納するよりもおそらく適切です。 ラップしたオブジェクト。