【问题标题】:How can I rewind a pdo result?如何回退 pdo 结果?
【发布时间】:2012-02-08 01:46:14
【问题描述】:

我知道以前有人问过这个问题,但我尝试了一切,但找不到它是如何工作的。 我有一个准备好的查询,我需要使用两次这样的 while() 循环:

$query = $pdo->prepare('SELECT ...');
$query->execute();
while( $results = $query->fetch() ){
 // instructions
}

// rewind
while( $results = $query->fetch() ){
 // instructions
}

谢谢

【问题讨论】:

  • 我知道,我看过这篇文章,但我不明白如何让它发挥作用。
  • 如果你问同样的问题,你可能会得到同样的答案。
  • @ÁlvaroG.Vicario 但 OP ddnt.

标签: php pdo


【解决方案1】:

要扩展上述答案,您可以使用:

$results = $query->fetchAll();

$results 现在是一个包含结果集的数组,所以:

foreach ($results as $row) ...

与 MySQL 相比,您可以使用缓冲查询:

$stmt = $db->prepare('SELECT ...', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

fetchAll() 方法将独立于数据库供应商,但会有更高的内存要求。

【讨论】:

  • 是的,但是使用 fetchAll() 你必须像这样使用行号:$result[0],然后是 $result[1]... 但我需要使用一些代码第二个循环的结果在第一个中具有相同的数字,但不是所有的结果。所以我不知道号码。 (不知道我说清楚了吗……)
【解决方案2】:

可能就像在第 1 次迭代中获取所有结果并在第 2 次循环中一样简单:

$res = array();
while( $results = $query->fetch() ){
   $res[] = $results;
   // instructions
}

foreach($res as $results){
   // instructions
}

【讨论】:

  • 实际上,您只需要使用fetchAll 并摆脱第一个循环。
  • 比我见过的一切都容易,而且它有效。谢谢
猜你喜欢
  • 2010-09-21
  • 2013-09-27
  • 2012-11-21
  • 2014-02-24
  • 2013-01-28
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多