而循环VS. $ sqlResult - > fetch_all(MYSQLI_ASSOC);

时间:2014-01-10 22:36:57

标签: 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_all

的内置功能
global $connection;
$sql = "SELECT * FROM table";

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

return $result->fetch_all(MYSQLI_ASSOC);

这不会导致while循环不必要吗? 有什么好处? 速度差异?

2 个答案:

答案 0 :(得分:2)

这里有一些有效的陈述..但只是在mysqli_fetch_all文档中添加它(http://www.php.net/manual/en/mysqli-result.fetch-all.php):

  

由于mysqli_fetch_all()将所有行作为数组返回到一个数组中   步骤,它可能比一些类似的功能消耗更多的内存,如   mysqli_fetch_array(),它一次只返回一行   结果集。 此外,如果您需要迭代结果集,那么   将需要一个循环结构,这将进一步影响性能。   出于这些原因,mysqli_fetch_all()只应该在那些中使用   将获取的结果集发送到另一个层的情况   用于处理。

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

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

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

}

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

至于其他一些速度分析此博客文章 - > http://blog.ulf-wendel.de/2007/php-mysqli_fetch_all/有点过时(2007年),但在比较这两种方法方面做得很好。

答案 1 :(得分:1)

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