首页 > 解决方案 > 使用 while() 或 foreach() 查询显示结果

问题描述

我正在搞乱如何从 MySQL 进行查询并在 PHP 上显示它们,我偶然发现了一些东西:

这是我正在查询的表:
这是我正在查询的表

$query = mysqli_query($conexion, "SELECT * FROM notas");

while($nota = mysqli_fetch_assoc($query)){
    var_dump($nota);
    echo $nota["Descripcion"];
}

每当我使用 while() 来显示查询的所有结果时,它都会起作用。该表有 2 行,它们都显示。

var_dump($notas) 的结果:
var_dump($notas) 的结果

但每当我使用 foreach() 时,它只会返回查询的最后一个结果。

$query = mysqli_query($conexion, "SELECT * FROM notas");

foreach(mysqli_fetch_assoc($query) as $valor){
    var_dump($valor);
}

var_dump($valor) 的结果:
var_dump($valor) 的结果

有什么理由吗?我在 foreach() 循环中做错了什么?我真的说不出来。我只想说“捏造它”,接受它并只使用 while 循环来显示查询,但是,你知道,我想知道我是否做错了什么或不理解某事。

标签: phpmysqli

解决方案


第二个版本循环遍历列,而不是行。它相当于:

$row = mysqli_fetch_assoc($query);
foreach ($row as $valor) {
    var_dump($valor);
}

您可以在这里看到它只是获取一行,这是一个关联数组,然后循环遍历该数组的元素。

foreach (<expression> as <variable>)每次循环都不会重新评估表达式。它执行一次,保存该数组,然后循环遍历数组元素。

mysqli_result对象是可迭代的,因此您可以执行以下操作:

foreach($query as $valor) {
    var_dump($valor);
}

您也可以调用mysqli_fetch_all($query),它将返回所有结果的二维数组,然后循环遍历它。但是如果查询返回很多结果,这将占用大量内存。


推荐阅读