mysqli_fetch_array()或mysqli_fetch_all()?

时间:2016-02-25 11:25:50

标签: php mysqli

我看到mysqli_fetch_array()mysqli_fetch_all()之间的比较表明,对于mysqli_fetch_all(),它需要更多内存,我将不得不迭代数组。

mysqli_fetch_all()是对mysqli的一次通话,但mysqli_fetch_array()是每行一次通话,例如100次通话。

我不知道mysqli处理是如何工作的:当您考虑到通话次数时,是否真的更有效地呼叫mysqli_fetch_array()

(我已经知道返回的数据可以是关联数组)

2 个答案:

答案 0 :(得分:1)

From PHP's page on mysql_fetch_all()

  

我使用fetch_allwhile / fetch_array

进行了测试      

fetch_all使用更少的内存(但不是那么多)。

     

在我的情况下(test1和test2):147008,262848字节(fetch_all)与147112,262888字节(fetch_array& while)。

     

因此,关于内存,在两种情况下都是相同的

     

然而,关于表现:

     

我的测试使用fetch_all 需要:350ms(最差情况),而使用fetch_array 需要 464ms(最差情况),或者使用fetch_arraywhile周期 最差35%。

     

因此,使用fetch_all ,对于返回适量信息的普通代码是:

     

一个。 清洁(单行代码)
  湾使用更少的内存(减少约0.01%)
  C。的更快

     

php 5.6 32bits,windows 8.1 64bits

答案 1 :(得分:1)

它与效率无关。这完全是关于可用性

fetch_all()是一种被称为“语法糖”的东西 - 一种自动执行频繁操作的简写。它可以很容易地实现为用户空间函数:

function mysqli_fetch_all ($resouce, $mode = MYSQLI_BOTH)
{
    $ret = [];
    while ($row = $resource->fetch_array($mode))
    {
        $ret[] = $row;
    }
    return $ret;
}

因此,您可以告诉用例这些函数:

    如果您需要数组,则必须使用
  • fetch_all(),包含将在其他位置使用的所有返回的行。
  • 如果你要在一个接一个地处理所有行,必须使用循环中的
  • fetch_assoc()

就这么简单。

这些功能具有不同的用途,因此没有必要对它们进行比较。

请注意,就语法糖而言,PDO的甜度要高十倍,因为它的fetchAll()函数可以返回dozens different formats中的数据