【发布时间】:2020-12-02 18:39:18
【问题描述】:
我在搞乱如何从 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 循环来显示查询,但是,你知道,我想知道我是做错了什么还是不理解什么。
【问题讨论】:
-
见mysqli_fetch_all。这对你的 foreach 有用。原因
_fetch_assoc不起作用是它一次只返回一行并增加一个内部指针,所以下次调用它时它会检索下一行。对于foreach,您需要一个数组或iterator -
foreach($query但您应该使用一些错误报告,以便您知道查询已成功执行 -
如果您要处理大量行,使用
while( _fetch_assoc())会很好,如果一次将所有结果放入数组中,可能会占用过多内存。 -
另外,我个人建议使用
PDO而不是mysqli。我一直觉得它更容易使用,我喜欢它是用于绑定参数的 api。但这也不是一个关键的转换,所以不要让我的建议分散你对你想要完成的事情的注意力。我只是认为这是一种更好的开发者体验。 -
@Reed 我明白了。使用
_fetch_all确实有效,var_dump现在返回了我期待的两行。我会记住你所说的关于行和 PDO 的内容(还没有使用它,所以不妨研究一下)。谢谢 c: