php - 使用 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 行,它们都显示。
但每当我使用 foreach() 时,它只会返回查询的最后一个结果。
$query = mysqli_query($conexion, "SELECT * FROM notas");
foreach(mysqli_fetch_assoc($query) as $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)
,它将返回所有结果的二维数组,然后循环遍历它。但是如果查询返回很多结果,这将占用大量内存。
推荐阅读
- reactjs - @blueprintjs/table 如何使用箭头/tab 键导航
- scala - 无法从 Scala 脚本停止和 rm docker 容器
- python - 如果只有 1 天,则将 x 轴上的 timedelta 格式化为 HMS
- c - 地址消毒剂和 __attribute(section("mysection")) 失败
- netsuite - 为什么供应商账单没有节省更新?
- bash - Vagrant 在初始化时检查文件夹是否存在,否则创建?
- python - 如何进行 10 次随机拆分以保证机器学习结果的一致性
- angularjs - AngularJS Mongoose findOne 可以,但保存错误:DocumentNotFoundError:
- html - 拉伸表以垂直适合 TD
- javascript - 无法初始化 ng-include 模板中的元素