我真的不明白PDOStatement的意义,因为:
$PDO = new PDO();
$PDOS = $PDO->query($sql);
var_dump($PDOS->fetchAll()); //will return data
var_dump($PDOS->fetchAll()); //empty
是否需要传递一个参数,以便第二次fetchAll返回数据,但不再执行SQL?
答案 0 :(得分:0)
将结果首次调用fetchAll()
存储到PHP变量中。你有什么理由不能这样做吗?
$results = $PDOS->fetchAll();
然后,您可以根据需要尽可能多地使用$results
,而不会对数据库产生任何进一步的负担。
答案 1 :(得分:0)
PDOStatement
有一个迭代器。
PDOStatement::fetch()
将迭代行集。
调用fetchAll()
时,迭代器位于最后一行。
此迭代器仅在1个方向上移动。返回的唯一方法是再次执行查询。这是数据库的本质,PHP不应该将整个行集保留在内存中。