【问题标题】:php PDOStatement fetchAll second timephp PDOStatement fetchAll 第二次
【发布时间】:2011-07-08 21:21:51
【问题描述】:

我不太明白 PDOStatement 的意义,因为:

$PDO = new PDO(); 
$PDOS = $PDO->query($sql);

var_dump($PDOS->fetchAll()); //will return data 
var_dump($PDOS->fetchAll()); //empty

是否需要传递一个参数,以便第二次 fetchAll 返回数据,但无需再次执行 SQL?

【问题讨论】:

    标签: php pdo pdostatement


    【解决方案1】:

    PDOStatement 有一个迭代器。

    PDOStatement::fetch() 将遍历行集。 当调用fetchAll() 时,迭代器位于最后一行。

    此迭代器仅在 1 个方向上移动。返回的唯一方法是再次执行查询。这是数据库的本质,PHP 不应该将整个行集保存在内存中。

    【讨论】:

      【解决方案2】:

      只需将第一次调用 fetchAll() 的结果存储到 PHP 变量中。你有什么理由不能这样做?

      $results = $PDOS->fetchAll();
      

      然后,您可以根据需要尽可能多地使用$results,而不会对您的数据库造成任何负担。

      【讨论】:

      • 是的,我知道,我在想 $PDOS 在 fetchAll 之后不会丢失状态,结果将始终在方法请求时可用。
      • 认为它丢失状态的原因是因为 fetchAll() 实际上是从 mysql 请求结果行,而不是让您访问它已经获取和存储的结果。在 mysql 中使用查询缓冲可能会起作用:php.net/pdo-mysql#pdo-mysql.constants
      猜你喜欢
      • 2013-01-07
      • 2013-09-22
      • 2017-05-06
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2012-01-12
      • 2022-12-07
      • 2014-07-19
      相关资源
      最近更新 更多