这两个函数来自 mysqli_result 对象:
1.- fetch_array():获取数组中只有一条记录的行。
在这种情况下,您是否查询数据库的每一行?
2.- fetch_all():一次获取所有行并返回一个包含所有行的数组。
而在这种情况下,只查询一次(数据库)?
我不知道什么是最好的和最优化的方法。我不知道是不是一个接一个地得到这些行会更好,还是一次得到它们会更糟。
例子:
1.-fetch_array():
$resultUsers = getAllUsers($db);
while($row = $resultUsers->fetch_array()){
echo $row['name'];
}
2.- fetch_all():
$resultUsers = getAllUsers($db);
foreach ($resultUsers->fetch_all(MYSQLI_ASSOC) as $value) {
echo $value['name'] . "<br>";
}
2.A.- getAllUsers() 函数返回整个数组,其中包含数组内的 fetch_all() 并在这里遍历它。
foreach (getAllUser($db) as $value) {
echo $value['name'] . "<br>";
}
我不知道是如何查询数据库的,如果在 fetch_array() 中一次一个地查询数据库和 fetch_all() 。或者在这两种情况下,查询都是一次性完成的,变化的是如何遍历数据。
或者,如果有更好的方法可以使其更优化或以另一种方式接近它,那么我希望你能提供帮助(来自了解该主题的人)。一切顺利。
我觉得这是一个有趣的问题。遗憾的是,它似乎被OP抛弃了。
但是,建议为它做出一些贡献。
在大多数关于 php-mysql 的编程情况下,有必要从数据库中获取数据以进行比较,将其显示在屏幕上等。
在 MySQLi 中,基本上有 3 种最常用于获取结果集的方法:
mysqli_fetch_assoc()
: 得到一个关联的数据数组。mysqli_fetch_array()
:返回关联元素以及数字索引数据的组合。mysqli_fetch_object()
:返回一个对象,其属性对应于获取的行。spearheadsoftwares.com上的一个有趣的比较(见图)使用最新软件在各种负载条件下执行的基准测试检查了所有三种方法。
在测试中分别得到10、100、1000、10000、100000、1000000、10000000条记录的数据结果,看看每个函数的速度和效率如何。
每个数据集都包含一个
int
唯一类型的列和一个类型的列varchar
。也就是说,一个普通的数据集,就像我们通常在任何典型查询中使用的那些。据说一张图片值一千字(虽然那句话里有很多谎言......:)......让我们把它留给另一个论坛。
这是结果图:
查看这些结果,可以得出以下结论:
MySQLi 的默认功能 ,
mysqli_fetch_assoc
运行性能优于其他 2 种方法 (mysqli_fetch_array
和mysqli_fetch_object
)。当它返回对象而不是原生数组时,其性能
mysqli_fetch_object
是合理的,原生数组总是比任何其他类型的输出数组带来更好的内存使用。并且要使用面向对象的结果集方法,其他两个功能无法满足。就 . 而言
mysqli_fetch_array()
,这里的问题在于日常编程的使用,很多 php 程序员都是mysqli_fetch_array()
这样使用的,没有详细说明它的使用细节。默认情况下,mysqli_fetch_array
它根据其默认值返回两种类型的结果集result_type MYSQLI_BOTH
:Result_type: MYSQLI_NUM
- 它只给了我们一个编号索引的数组,例如:array ([0] => 'apple')
Result_type: MYSQLI_ASSOC
- 这只是一个关联数组,例如:array ('fruit' => 'apple')
其中'fruit'
将是数据库列的名称或使用的别名。因此,当我们使用时,我们会
mysqli_fetch_array
得到一组包含编号索引和关联集的重复数据,这当然是我们的性能障碍。因此,每当您使用该函数时,
mysqli_fetch_array
始终指定return_type
所需的结果集数组。结论
出于性能考虑,因为在大多数情况下,我们在 php 中的交互式数据管理期间需要一个关联数组,所以最推荐的函数是
mysqli_fetch_assoc()
实际上,查询只执行一次。唯一的大区别是它们允许您使用记录的方式。一个接一个或一次全部。
fetch_array() 处理 单行结果。
嘿,mysqli_fetch_all()一步返回数组中的所有行。这个函数比fetch_array()消耗更多的内存
这将取决于您,因为如果您有很多结果或期望大量结果,您可能会阻塞内存所以最好一个一个地遍历它们而不是提取所有它们所以这将取决于使用您将根据需要提供它以及要使用的实现