这两个函数的功能都是一次性把结果集取回到本地吧?那为什么store_result()在教材上写的是可以提高脚本效率,而fetch_all()是不建议使用,因为它的效率低。为什么两个功能一样的函数,会有这么大不同呢?谢谢!

解决方案 »

  1.   

    哪里一样了,PDO的fetchAll()和mysqli的fetch_all()差不多一个功能。都是将结果集全部转换为数组或对象。
    但store_result()就是另一回事了:
    如果需要对所有记录而不只是一小部分进行处理,可以调用mysqli_stmt对象中的store_result()方法,把所有结果一次全部传回到PHP程序中。这样做不仅更有效率,而且能减轻服务器的负担。store_result()方法是可选的,除了读取数据不改变任何东西。
      

  2.   

    它没放在一起,只是我觉得它对这两个函数的功能解释差不多。那也就是store_result()是把结果集传给php程序,而fetch_all()是把结果集转换成数组是吗?
      

  3.   

    对,再复制粘贴点说明
       默认情况下,SELECT查询结果将留在MySQL服务器上,等待fetch()方法把记录逐条取回到PHP程序中
       如果获取SELECT语句查找到了多少条记录,可以从mysqli_stmt对象中的num_rows属性中检索出来。但是,这个属性只有在提前执行过store_result()方法,将全部查询结果传回到PHP程序中的情况下才可以使用。
      

  4.   

    通常情况下,查询所产生的结果集是存放在 mysql 那边的
    每当执行 fetch_array 时都需要到 mysql 的缓冲区中去提取数据store_result (存储资源)
    可以将查询的结果集一次性提取到 php 的缓冲区来
    这样,当执行 fetch_array 时就不需要再到 mysql 那边去了,直接就在 php 的缓冲区中提取数据通常我们会用一个循环把查询结果独到数组中去,尤其是在使用模板引擎时更是这样
    while($row = mysqli_fetch_array($rs)) {
      $res[] = $row;
    }
    这时,fetch_all 就有用武之地了!他直接从查询结果集构造出数组,不劳烦你再一个个循环了
    函数既然存在,就有存在的理由,不能以自己的喜好来褒贬他们,尤其是在授之以渔的时候
      

  5.   

    哦,那假如我现在要从结果集中提取所有行,下面这两种方式,是不是从理论上效率应该相同?$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()) {
    ...
    }