while循环如何与mysqli_fetch_assoc()一起使用?

时间:2018-07-28 16:45:17

标签: php mysqli while-loop

这可能是一个愚蠢的初学者问题,我不认为它仅限于mysqli_fetch_assoc(),所以它可能是一个通用的编程问题。

无论如何,我有这个PHP代码,可以使用mysqli从数据库获取数据

$sql = "SELECT name FROM table1";
$result = mysqli_query($conn, $sql);

if($result){
    if(mysqli_num_rows($result) > 0){
        while($row = mysqli_fetch_assoc($result)){
            echo "Name: " . $row["name"]. "<br>";
        }
    }
}

我不明白的是那里的while循环是如何工作的。如何迭代到下一个元素并知道何时结束? mysqli_fetch_assoc()返回一个关联数组,该数组存储在行变量中,这意味着它不为null,因此为true,让while循环运行。我不明白的是它如何遍历行并在没有更多行时结束。我没有做任何特别的事情来将行更改为下一行,那么它如何独自完成呢?

还mysqli_fetch_assoc()返回一个关联数组,因此“名称”键不应该包含1个元素吗?还是该列中所有行的数组?

(希望您能理解我想说的话,我不是最擅长解释.-。)

编辑:我不了解的是这段代码如何遍历所有行。它是此功能中“内置代码”的一部分吗? (我在任何地方都找不到它可以确认)

3 个答案:

答案 0 :(得分:1)

最终,当mysqli_fetch_assoc($result)用完行时,它将返回NULL,其结果为false,这会跳出循环。

$row在数据库中产生一行,因此$row['name']将是特定行的'名称'的值。

让我们对其进行分解,也许是一个关于其内部工作方式的简明示例(请注意,这会更加有效,并且实际上不会运行多个查询):

$result = ['currentRow' => 0, 'query' => 'SELECT name FROM table1'];

while ($row = mysqli_fetch_result($result)) {
}

//First iteration
mysqli_fetch_result queries 'SELECT name FROM table1 LIMIT 0, 1'
it increments internally $result['currentRow'] to 1
it returns the row that was found

//Second iteration
mysqli_fetch_result queries 'SELECT name FROM table1 LIMIT 1, 1'
it increments internally $result['currentRow'] to 2
it returns the row that was found

//Third iteration
mysqli_fetch_result queries 'SELECT name FROM table1 LIMIT 2, 1'
no rows returned! Just simply return null (This will cause your while loop to break out)

答案 1 :(得分:1)

每次 mysqli_fetch_assoc($result)被访问后,指针将移至下一条记录。最后,当没有找到记录时,它返回 null ,这打破了while的条件。

答案 2 :(得分:0)

您始终将$result作为参数传递给mysqli_fetch_assoc。此参数包含迭代器信息,每次您调用此函数到下一行时,mysqli_fetch_assoc将使用该信息进行迭代。

在每次迭代期间,$row['name']将是一个字符串。