问一下关于mysqli的store_result()和PDO的fetch_all()的区别

love_u_qt 2012-03-30 04:05:11
这两个函数的功能都是一次性把结果集取回到本地吧?

那为什么store_result()在教材上写的是可以提高脚本效率,而fetch_all()是不建议使用,因为它的效率低。

为什么两个功能一样的函数,会有这么大不同呢?

谢谢!
...全文
290 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
love_u_qt 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

理论上效率应该相同,但实际上不同
前者无论是使用内存还是执行速度上,效率要高很多

你可以自己测试一下
[/Quote]
恩好的!谢谢了!
xuzuning 2012-03-30
  • 打赏
  • 举报
回复
理论上效率应该相同,但实际上不同
前者无论是使用内存还是执行速度上,效率要高很多

你可以自己测试一下
love_u_qt 2012-03-30
  • 打赏
  • 举报
回复
哦,那假如我现在要从结果集中提取所有行,下面这两种方式,是不是从理论上效率应该相同?

$stmt = $link -> prepare('select * from test');
$stmt -> execute();

$stmt -> fetch_all();



$stmt = $link -> prepare('select * from test');
$stmt -> execute();

$stmt -> store_result();
$stmt -> bind_result('is', $id, $name);
while($row = $stmt -> fetch()) {
...
}

xuzuning 2012-03-30
  • 打赏
  • 举报
回复
通常情况下,查询所产生的结果集是存放在 mysql 那边的
每当执行 fetch_array 时都需要到 mysql 的缓冲区中去提取数据

store_result (存储资源)
可以将查询的结果集一次性提取到 php 的缓冲区来
这样,当执行 fetch_array 时就不需要再到 mysql 那边去了,直接就在 php 的缓冲区中提取数据

通常我们会用一个循环把查询结果独到数组中去,尤其是在使用模板引擎时更是这样
while($row = mysqli_fetch_array($rs)) {
$res[] = $row;
}
这时,fetch_all 就有用武之地了!他直接从查询结果集构造出数组,不劳烦你再一个个循环了


函数既然存在,就有存在的理由,不能以自己的喜好来褒贬他们,尤其是在授之以渔的时候
改一下昵称 2012-03-30
  • 打赏
  • 举报
回复
对,再复制粘贴点说明
默认情况下,SELECT查询结果将留在MySQL服务器上,等待fetch()方法把记录逐条取回到PHP程序中
如果获取SELECT语句查找到了多少条记录,可以从mysqli_stmt对象中的num_rows属性中检索出来。但是,这个属性只有在提前执行过store_result()方法,将全部查询结果传回到PHP程序中的情况下才可以使用。
love_u_qt 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你那是什么教材?
为什么要把不同的东西放在一起比较?
[/Quote]
它没放在一起,只是我觉得它对这两个函数的功能解释差不多。

[Quote=引用 2 楼 的回复:]

哪里一样了,PDO的fetchAll()和mysqli的fetch_all()差不多一个功能。都是将结果集全部转换为数组或对象。
但store_result()就是另一回事了:
如果需要对所有记录而不只是一小部分进行处理,可以调用mysqli_stmt对象中的store_result()方法,把所有结果一次全部传回到PHP程序中。这样做不仅更有效率,而且能减轻服务器的负担。store_res……
[/Quote]
那也就是store_result()是把结果集传给php程序,而fetch_all()是把结果集转换成数组是吗?
改一下昵称 2012-03-30
  • 打赏
  • 举报
回复
哪里一样了,PDO的fetchAll()和mysqli的fetch_all()差不多一个功能。都是将结果集全部转换为数组或对象。
但store_result()就是另一回事了:
如果需要对所有记录而不只是一小部分进行处理,可以调用mysqli_stmt对象中的store_result()方法,把所有结果一次全部传回到PHP程序中。这样做不仅更有效率,而且能减轻服务器的负担。store_result()方法是可选的,除了读取数据不改变任何东西。
xuzuning 2012-03-30
  • 打赏
  • 举报
回复
你那是什么教材?
为什么要把不同的东西放在一起比较?

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧