Home > Backend Development > PHP Tutorial > 为何用mysqli类时foreach只能取出一行,而while循环取出多行数据?

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

WBOY
Release: 2016-06-23 13:51:27
Original
1294 people have browsed it

我是新手,有个问题请帮忙,就是用mysqli类,数据表test中有5行数据,用foreach函数只能取出第一行,其他的都取不出来,而用while就可以取出5行,为何?


$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."
";


?>


回复讨论(解决方案)

foreach($rs->fetch_row() as $key=>$v2){  
   
  print_r( $v2); //这里只能取出第一行数据
   
}
这样写实现的功能是:循环输出第一行的所有列的数据。
$rs->fetch_row()返回的是数组。

foreach($rs->fetch_row() as $key=>$v2){  
   
  print_r( $v2); //这里只能取出第一行数据
   
}

foreach($rs->fetch_array() as $key=>$v2){  
   
  print_r( $v2); //这里只能取出第一行数据
   
}

你的$rs->fetch_row()就只有一行数据,要用while循环循环读取出来。

foreach($rs->fetch_row() as $key=>$v2){  
   
  print_r( $v2); //这里只能取出第一行数据
   
}
这样写实现的功能是:循环输出第一行的所有列的数据。
$rs->fetch_row()返回的是数组。



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

但是报错

foreach($rs->fetch_row() as $key=>$v2){       print_r( $v2); //这里只能取出第一行数据   }
Copy after login


你foreach()里面的东西本身就有问题了,$rs->fetch_row()只取出了一行吧

错误提示:Warning: Invalid argument supplied for foreach() in D:\www\mysqli.php on line 13

网上说foreach的效率while高,所以用foreach,如果问题出在re->fetch_array这里,那while应该也不会读出来多行数据?

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

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

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


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


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

while($ary=$rs->fetch_row())
{
foreach($ary as $key=>$v2){
print_r($v2);
}
}
这样是可以的。

yupengbo 说的很对,是不是可以得出个结论while是可以行数据和列数据都遍历,而foreach只能遍历列数据????

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

foreach($rs->fetch_row() as $v2)里面的$rs->fetch_row() 仅仅当作一个数组来处理 把里面的一行数组读完就结局了。不会在循环的从$rs->fetch_row() 读取数据

这样应该可以一次性读取出来

foreach($rs->fetch_all() as $key=>$v2){  
   
  print_r( $v2); //这里只能取出第一行数据
   
}

嗯, 
foreach是在数组内部循环,
注意你第一个foreach那个循环, fetch_row只运行了一次,

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


无语,你应该写
foreach($rs as $row)
    printf_r($row);

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template