PHP的PDO fetchAll() - 虽然不工作,foreach作品 [英] php PDO fetchAll() - while not working, foreach works

查看:150
本文介绍了PHP的PDO fetchAll() - 虽然不工作,foreach作品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这里是一个例子

  $ db = new PDO(mysql:host =。$ dbhost。; dbname =。$ dbname,$ dbuser,$ dbpass); 

$ page = $ db-> prepare(SELECT * FROM page);
$ page-> execute();
$ b $ foreach($ page-> fetchAll(PDO :: FETCH_ASSOC)as $ row){

// echo a row
//正在工作

然而,如果试着循环一会儿


$ ($ row = $ page-> fetchAll(PDO :: FETCH_ASSOC)){

// echo a row $ b $(
pre $ b //显示空的
}

我尝试只使用fetch()工作,我的问题:为什么fetchAll()不能与WHILE?

解决方案

取回所有返回所有记录保留在结果集中。考虑到这一点,你的foreach能够按照预期迭代结果集。



对于等效的实现应该使用 $ page-> fetch(PDO :: FETCH_ASSOC);

  while($ row = $ page-> fetch (PDO :: FETCH_ASSOC)){
//用行
做一些很棒的事情}



如果你想使用一段时间,并获取所有你可以做的

$ $ p $ $ $ $ $ $ page-> fetchAll PDO :: FETCH_ASSOC);

//使用array_shift释放与该记录相关的内存,因为我们处理它
while($ row = array_shift($ rows)){
// do something真棒与行
}

一个警告虽然:取所有将做到这一点,如果结果大小很大,则会压缩机器上的资源。我只会这样做,如果我知道结果集会很小,或者我强制通过限制查询。

I would like to know if i'm doing fine OR fetchAll() doesn't work with WHILE.

here is an exemple

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

however, i if try looping with a while

while ($row=$page->fetchAll(PDO::FETCH_ASSOC)){

//echo a row
//Show empty
}

i tryed to use only fetch(), it was working, my question: why fetchAll() doesn't work with "WHILE" ?

解决方案

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.

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
}

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作品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆