ホームページ >バックエンド開発 >PHPチュートリアル >mysqli クラスを使用する場合、foreach は 1 行しか取り出せないのに、while ループは複数行のデータを取り出せるのはなぜですか?
初心者です。質問があります。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); // ここではデータの最初の行のみをフェッチできます
}
この方法で実装された関数は次のとおりです。最初の行の列 データ。
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); // ここではデータの最初の行のみをフェッチできます
}
実装されたものを書き込みます次のような関数 はい: 最初の行のすべての列のデータをループアウトします。
foreach($rs->fetch_row() as $key=>$v2){
print_r( $v2); // データの最初の行のみここから取り出すことができます
}
このように書くことで実装される関数は、最初の行のすべての列のデータをループアウトします。
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);
}
このように理解すると、 $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); と書くと良いでしょう。