ホームページ >バックエンド開発 >PHPチュートリアル >mysqli クラスを使用する場合、foreach は 1 行しか取り出せないのに、while ループは複数行のデータを取り出せるのはなぜですか?

mysqli クラスを使用する場合、foreach は 1 行しか取り出せないのに、while ループは複数行のデータを取り出せるのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 13:51:271300ブラウズ

初心者です。質問があります。mysqli クラスを使用しています。foreach 関数を使用すると、最初の行だけを取り出すことができます。ただし、 while を使用して 5 行を取り出すことができるのはなぜでしょうか。


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

$sql="ユーザーから選択"

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

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


print_r($v2); fetched here Data

}


// While (list ($ a, $ B, $ C, $ d) = $ rs- & gt; 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); $rs->fetch_row() は 1 行しか取り出しません

エラー メッセージ: 警告: に指定された引数が無効です。 D:wwwmysqli.php の 13 行目の foreach ()


ネットでは 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);
}

}
これでOKです

yupengbo は正しいです。 while は行データと列データの両方を走査できると結論付けることができますか?

このように理解すると、 $rs->fetch_row() は、初めて 0 を指すポインタと同等になります
つまり、 $rs->fetch_row() を読み込んでいる間にデータがあり、それを読み出すと、続行します次回へ $rs ->fetch_row() このポインタは 1 ビット下に移動します。データを読み取れなくなるまで終了しません。

foreach($rs->fetch_row() as $v2) の $rs->fetch_row() は単なる配列として扱われ、内部の 1 行の配列を読み取って終了します。データはループ内の $rs->fetch_row() から読み取られません

これにより、一度にすべてを読み取ることができるはずです

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

print_r($v2); // ここではデータの最初の行のみを取り出すことができます

}

さて、
配列内の foreach ループ、
最初の foreach ループに注意してください、fetch_row は 1 回だけ実行されます,

whileループに関しては、fetch_arrayが5回実行されました


絶句、
foreach($rs as $row)
printf_r($row); と書くと良いでしょう。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。