問題描述
我想知道我是做得好還是 fetchAll() 不適用于 WHILE.
I would like to know if i'm doing fine OR fetchAll() doesn't work with WHILE.
舉個例子
$db=new PDO("mysql:host=" .$dbhost. "; dbname=" . $dbname, $dbuser, $dbpass);
$page=$db->prepare("SELECT * FROM page");
$page->execute();
foreach ($page->fetchAll(PDO::FETCH_ASSOC) as $row) {
//echo a row
//is working
}
但是,我如果嘗試使用 while 循環
however, i if try looping with a while
while ($row=$page->fetchAll(PDO::FETCH_ASSOC)){
//echo a row
//Show empty
}
我嘗試只使用 fetch(),它起作用了,我的問題是:為什么 fetchAll() 不能與WHILE"一起使用?
i tryed to use only fetch(), it was working, my question: why fetchAll() doesn't work with "WHILE" ?
推薦答案
Fetch all 返回結果集中剩余的所有記錄.考慮到這一點,您的 foreach 能夠按預期迭代結果集.
Fetch all returns all of the records remaining in the result set. With this in mind your foreach is able to iterate over the result set as expected.
對于等效的 while 實現應該使用 $page->fetch(PDO::FETCH_ASSOC);
For the equivalent while implementation should use $page->fetch(PDO::FETCH_ASSOC);
while ($row = $page->fetch(PDO::FETCH_ASSOC)){
// do something awesome with row
}
如果你想使用一段時間并獲取所有你能做的
if you want to use a while and fetch all you can do
$rows = $page->fetchAll(PDO::FETCH_ASSOC);
// use array_shift to free up the memory associated with the record as we deal with it
while($row = array_shift($rows)){
// do something awesome with row
}
盡管有一句警告:fetch all 將完全做到這一點,如果結果大小很大,則會對您機器上的資源造成壓力.只有在我知道結果集很小的情況下,我才會這樣做,或者我通過對查詢應用限制來強制這樣做.
A word of warning though: fetch all will do exactly that, if the result size is large it will stress the resources on your machine. I would only do this if I know that the result set will be small, or I'm forcing that by applying a limit to the query.
這篇關于php PDO fetchAll() - 雖然不工作,但 foreach 工作的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!