Php While循环与$sqlResult->;获取所有(MYSQLI_ASSOC);

Php While循环与$sqlResult->;获取所有(MYSQLI_ASSOC);,php,mysqli,standards,Php,Mysqli,Standards,不太清楚为什么,但我今天已经见过很多次了 global $connection; $sql = "SELECT * FROM table"; $result = $connection->query($sql); $rows = array(); while ($row = mysqli_fetch_assoc($result)) { $rows[] = $row; } return $rows; 为什么不直接使用内置的函数fetch\u all global $con

不太清楚为什么,但我今天已经见过很多次了

global $connection;
$sql = "SELECT * FROM table";

$result = $connection->query($sql);

$rows = array();
while ($row = mysqli_fetch_assoc($result)) {

    $rows[] = $row;

}

return $rows;
为什么不直接使用内置的函数fetch\u all

global $connection;
$sql = "SELECT * FROM table";

$result = $connection->query($sql);

return $result->fetch_all(MYSQLI_ASSOC);
这难道不会使while循环变得不必要吗? 有什么好处吗?
速度差异?

它可能是在$mysqli出现之前实现的,然后$mysqli出现,以及fetch_all功能,开发人员很懒惰,认为这是更新代码的最简单方法。

这里已经有一些有效的语句了。。但只需在mysqli_fetch_上添加它声明的所有文档():

因为mysqli_fetch_all()以数组的形式在单个数组中返回所有行 步骤中,它可能会比一些类似的函数(如 mysqli_fetch_array(),它一次只从 结果集此外,如果需要迭代结果集,则 将需要一个将进一步影响性能的循环结构。 出于这些原因,mysqli_fetch_all()应该只在那些 获取的结果集将被发送到另一层的情况 用于处理

粗体部分表示,如果他在每次提取后进行一些处理:

while ($row = mysqli_fetch_assoc($result)) {

     $rows[] = $row;
     ... //im doing stuff with $row here

}
他可以获得比使用mysqli_fetch_all函数(必须循环才能获取所有行)更好的性能,然后再执行另一个循环来处理每一行


至于其他一些速度分析,这篇博文->有点过时(2007年),但在比较这两种方法方面做得还不错。

a)开发人员正在阅读一本旧的教程/书籍,这就是它所展示的方法。B) 开发人员只知道这些。C) 他们喜欢它的样子。D) 如果开发人员在循环之前没有错误检查结果是否返回,那么while版本不会像foreach($rows as$row)那样抛出错误(似乎大多数人都没有)。可以继续…B)-绝对不能接受。“开发人员”应该了解自己的实用工具带上有什么。如果您可以继续,那么您可以这样做吗?while一次只复制一条记录的第二个副本,而foreach()保存整个结果集和(每个)记录的一个副本,因此内存占用更小。今天,这一点可以忽略不计,但在处理大型结果集时,它可能会产生影响。