使用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) 的结果:

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

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

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

var_dump($valor) 的结果:

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

回答

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

$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),它将返回所有结果的二维数组,然后循环遍历它。但是如果查询返回很多结果,这将使用大量内存。


以上是使用while()或foreach()查询显示结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>