mysqli_fetch_row() 在 PHP 中的 foreach() 之后不显示

当 foreach 后跟显示相同查询结果的 mysqli_fetch_row 时,mysqli_fetch_row() 不会显示。但是,如果 mysqli_fetch_row 在 foreach() 显示之前执行。为什么是这样?


询问:


<?php

$connection = mysqli_connect("localhost", "root", "", "login_app");

$query = "SELECT *

          FROM users";

$result = mysqli_query($connection, $query);

if(!$result){

    die("db connection failed " . mysqli_error());

}

?>

仅显示 FORACH 的结果:


   <?php

   foreach($result as $results){

        echo "User ID: " . $results['userID'] . "<br>";

        echo "Username: " . $results['userName'] . "<br>";

        echo "Password: " . $results['password'] . "<br>";

    };


    $row = mysqli_fetch_row($result);

    print_r($row);

    ?>  

显示 FOREACH 和 MYSQLI_FETCH_ROW 的结果:


    <?php

    $row = mysqli_fetch_row($result);

    print_r($row);


    foreach($result as $results){

        echo "User ID: " . $results['userID'] . "<br>";

        echo "Username: " . $results['userName'] . "<br>";

        echo "Password: " . $results['password'] . "<br>";

    };

    ?>  


HUX布斯
浏览 303回答 2
2回答

白猪掌柜的

执行 SELECT 查询并mysqli_query返回一个mysqli_result对象。该对象实现Traversable了 ,这就是您能够使用 foreach 循环来显示结果的原因。foreach($result&nbsp;as&nbsp;$results){&nbsp;...基本上是一种更方便的做法while&nbsp;($results&nbsp;=&nbsp;mysqli_fetch_row($result))&nbsp;{&nbsp;...(请参见此处的示例 #3&nbsp;。)无论采用哪种方式,您都在获取所有结果,并且当您到达结果集的末尾时,$results将保存最后一个获取的值 (&nbsp;null)。

当年话下

从手册:从结果集中获取一行数据并将其作为枚举数组返回,其中每一列存储在从 0(零)开始的数组偏移量中。对该函数的每次后续调用都将返回结果集中的下一行,如果没有更多行,则返回 NULL。通过使用 foreach 循环迭代结果集,您实际上耗尽了所有行,这就是为什么在循环之后的任何后续行提取中都没有数据可用的原因。
打开App,查看更多内容
随时随地看视频慕课网APP