Một PDOStatement
(mà bạn có trong $users
) là một con trỏ chuyển tiếp. Điều đó có nghĩa là, sau khi được sử dụng (foreach
đầu tiên lặp lại), nó sẽ không tua lại phần đầu của tập kết quả.
Bạn có thể đóng con trỏ sau foreach
và thực hiện lại câu lệnh:
$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/>";
}
Hoặc bạn có thể lưu vào bộ nhớ cache bằng cách sử dụng CachingIterator
phù hợp với fullcache:
$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/>";
}
Bạn tìm CachedPDOStatement
lớp học như một ý chính
. Trình lặp bộ nhớ đệm có lẽ lành mạnh hơn việc lưu trữ tập kết quả vào một mảng vì nó vẫn cung cấp tất cả các thuộc tính và phương thức của PDOStatement
đối tượng mà nó đã bọc.