我看到mysqli_fetch_array()
和mysqli_fetch_all()
之间的比较表明,对于mysqli_fetch_all()
,它需要更多内存,我将不得不迭代数组。
mysqli_fetch_all()
是对mysqli
的一次通话,但mysqli_fetch_array()
是每行一次通话,例如100次通话。
我不知道mysqli处理是如何工作的:当您考虑到通话次数时,是否真的更有效地呼叫mysqli_fetch_array()
?
(我已经知道返回的数据可以是关联数组)
答案 0 :(得分:1)
From PHP's page on mysql_fetch_all()
:
我使用
进行了测试fetch_all
与while
/fetch_array
和
fetch_all
使用更少的内存(但不是那么多)。在我的情况下(test1和test2):147008,262848字节(
fetch_all
)与147112,262888字节(fetch_array
&while
)。因此,关于内存,在两种情况下都是相同的。
然而,关于表现:
我的测试使用
fetch_all
需要:350ms(最差情况),而使用fetch_array
需要 464ms(最差情况),或者使用fetch_array
和while
周期 最差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中的数据