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