एक PDOStatement (जो आपके पास $users . में है ) एक फॉरवर्ड-कर्सर है। इसका मतलब है, एक बार सेवन करने के बाद (पहला foreach iteration), यह परिणामसेट की शुरुआत में वापस नहीं आएगा।
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 के सभी गुणों और विधियों को प्रदान करता है वह वस्तु जिसे लपेटा गया है।