这可能是一个愚蠢的初学者问题,我不认为它仅限于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()返回一个关联数组,该数组存储在row变量中,这意味着它不为空,因此为真,让我们运行while循环。我不明白的是,当没有更多的行时,它是如何迭代各行并结束的。我没有专门做任何事情来将行更改为下一行,那么它是如何自己完成的呢?
另外,mysqli_fetch_assoc()返回一个关联数组,所以"name“键不应该包含1个元素吗?或者它是该列中所有行的数组?
(我希望你能理解我想说的,我不是最擅长解释的人。)
编辑:我不明白的是这段代码是如何遍历所有行的。它是这个函数中“内置代码”的一部分吗?(我在任何地方都找不到来确认)
发布于 2018-07-29 00:52:50
最后,当mysqli_fetch_assoc($result)
用完所有行时,它将返回NULL,计算结果为false,从而中断循环。
名称在数据库中只产生一行,因此$row['name']
将是特定行的‘$row
’值。
让我们用一个简单的例子来分析一下它是如何在内部工作的(请注意,它的工作效率要高得多,实际上不会运行多个查询):
$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)
发布于 2018-07-29 00:52:17
您总是将$result
作为参数传递给mysqli_fetch_assoc
。此参数保存迭代器信息,mysqli_fetch_assoc
将使用该信息在每次调用此函数时前进到下一行。
在每次迭代中,$row['name']
将是一个单独的字符串。
https://stackoverflow.com/questions/51573338
复制相似问题