mysqli_fetch_assoc是否按顺序返回数据?

时间:2013-08-02 08:49:32

标签: php mysql

我正在使用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但没有发现任何其他人遇到类似问题。

3 个答案:

答案 0 :(得分:3)

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

如果时间戳是相同的并且是唯一的ORDER BY字段,那么是的,mySQL完全可以从同一查询中提供不同的订单。

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

如果你真的希望它们总是以相同的顺序出现,即使存在重复,简单的答案是将主键字段添加到ORDER BY子句的末尾。 (你有一个唯一的主键字段,对吧?对吗?

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我有同样的问题。我使用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'