mysqli_fetch_assoc是否按顺序返回数据


Does mysqli_fetch_assoc return data in order?

我正在使用mysqli_fetch_assoc将数据推送到行数组中。

$res = mysqli_query($link, $query);
$rows = array();
while($r = mysqli_fetch_assoc($res)) {
$rows[] = $r;
echo "<br>location:".$r["assigned"]."||".$r["amount"]."<br>";
}

我在这个php文件中看到的顺序和在mysql命令行上执行查询时看到的顺序是不同的。最后一行和倒数第二行在php中交换。

在mysql查询中,我使用了一个order by timestamp子句。

我搜索过mysql_fetch_assoc,但没有发现其他人遇到过类似的问题。

返回给PHP的数据的顺序是mySQL返回给它的顺序。

如果时间戳相同,并且这是唯一的ORDER BY字段,那么是的,mySQL完全有可能从同一查询中给出不同的顺序。

为什么它会在相同的查询之间以不同的顺序提供它们是未知的;也许是缓存中的工件或类似的东西?但最终的要点是,如果没有指定区分记录的排序顺序,那么数据库可以自由地以它喜欢的任何顺序提供它们。

如果你真的希望它们总是按相同的顺序排列,即使有重复,简单的答案就是将主键字段添加到ORDER BY子句的末尾。(您确实有一个唯一的主键字段,对吗?对吗?

默认情况下,数据库返回数据的顺序为未定义。没有人对返回数据的顺序做出任何保证。如果需要特定的订单,请使用ORDER BY子句。这并不特定于任何一种获取数据的特定方式。

我也遇到了同样的问题。我使用ORDER BY来获得MySQL中的排序数组。

在MySQL控制台上进行此查询,结果非常完美:

SELECT * FROM I_data_grab WHERE auid='3' ORDER BY 'tempo'

但是在PHP中获取的SAME查询返回了一个未排序的数组。

我决定删除"tempo"变量中的"如下:

SELECT * FROM I_data_grab WHERE auid='3' ORDER BY tempo

而不是:

SELECT * FROM I_data_grab WHERE auid='3' ORDER BY 'tempo'