为何用mysqli类时foreach只能取出一行,而while循环取出多行数据?

北京大丸子 2012-01-06 05:07:19
我是新手,有个问题请帮忙,就是用mysqli类,数据表test中有5行数据,用foreach函数只能取出第一行,其他的都取不出来,而用while就可以取出5行,为何?

<?php

$mysqlii=new mysqli("localhost","root","root","test");

$sql="select * from user";

$rs=$mysqlii->query($sql,MYSQLI_STORE_RESULT);

foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

//while(list($a,$b,$c,$d)=$rs->fetch_array()) 能够取出5行即全部数据
//
//echo $a."+".$b."+".$c."<br/>";


?>
...全文
430 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Augusboy 2014-08-17
  • 打赏
  • 举报
回复
无语,你应该写 foreach($rs as $row) printf_r($row);
helloyou0 2012-01-07
  • 打赏
  • 举报
回复
嗯,
foreach是在数组内部循环,
注意你第一个foreach那个循环, fetch_row只运行了一次,

而while那个循环,fetch_array是运行了5次


qq277049 2012-01-06
  • 打赏
  • 举报
回复
这样应该可以一次性读取出来

foreach($rs->fetch_all() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}
qq277049 2012-01-06
  • 打赏
  • 举报
回复
可以这样理解 $rs->fetch_row() 这个相当于一个指针 第一次指向 0
所以while读取$rs->fetch_row() 是有数据出来的,读出来继续下一次的时候 $rs->fetch_row()这个指针会向下移一位。直到读不出数据才会结束。

foreach($rs->fetch_row() as $v2)里面的$rs->fetch_row() 仅仅当作一个数组来处理 把里面的一行数组读完就结局了。不会在循环的从$rs->fetch_row() 读取数据
北京大丸子 2012-01-06
  • 打赏
  • 举报
回复
yupengbo 说的很对,是不是可以得出个结论while是可以行数据和列数据都遍历,而foreach只能遍历列数据????
yupengbo 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jiang396 的回复:]

引用 1 楼 yupengbo 的回复:
foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}
这样写实现的功能是:循环输出第一行的所有列的数据。
$rs->fetch_row()返回的是数组。


我也考虑过是个二维数组,用
foreach($rs->fetch_row() as ……
[/Quote]
这个还是不对啊!
foreach($rs->fetch_row() as $v2)
当你打印$v2的时候,打印出来的是第一行中的每一列的数据,
是个字符串,不是数组。
这种情况下,你再foreach($v2 as $v3)的话肯定会报错啊!

while($ary=$rs->fetch_row())
{
foreach($ary as $key=>$v2){
print_r($v2);
}
}
这样是可以的。
北京大丸子 2012-01-06
  • 打赏
  • 举报
回复
网上说foreach的效率while高,所以用foreach,如果问题出在re->fetch_array这里,那while应该也不会读出来多行数据?
北京大丸子 2012-01-06
  • 打赏
  • 举报
回复
错误提示:Warning: Invalid argument supplied for foreach() in D:\www\mysqli.php on line 13
zsj913427 2012-01-06
  • 打赏
  • 举报
回复

foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}


你foreach()里面的东西本身就有问题了,$rs->fetch_row()只取出了一行吧
北京大丸子 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yupengbo 的回复:]
foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}
这样写实现的功能是:循环输出第一行的所有列的数据。
$rs->fetch_row()返回的是数组。
[/Quote]

我也考虑过是个二维数组,用
foreach($rs->fetch_row() as $v2){

foreach($v2 as $v3){

print_r( $v3);

}
}

但是报错
一起混吧 2012-01-06
  • 打赏
  • 举报
回复
你的$rs->fetch_row()就只有一行数据,要用while循环循环读取出来。
wxhbbdd 2012-01-06
  • 打赏
  • 举报
回复
foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}

foreach($rs->fetch_array() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}
yupengbo 2012-01-06
  • 打赏
  • 举报
回复
foreach($rs->fetch_row() as $key=>$v2){

print_r( $v2); //这里只能取出第一行数据

}
这样写实现的功能是:循环输出第一行的所有列的数据。
$rs->fetch_row()返回的是数组。

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧