Php 如何回放pdo结果?

Php 如何回放pdo结果?,php,pdo,Php,Pdo,我知道以前有人问过这个问题,但我什么都试过了,却找不到它是如何工作的。 我有一个准备好的查询,需要在两个while()循环中使用两次,如下所示: $query = $pdo->prepare('SELECT ...'); $query->execute(); while( $results = $query->fetch() ){ // instructions } // rewind while( $results = $query->fetch() ){ //

我知道以前有人问过这个问题,但我什么都试过了,却找不到它是如何工作的。 我有一个准备好的查询,需要在两个while()循环中使用两次,如下所示:

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

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

谢谢

只需在第一次迭代中获得所有结果,然后在第二次迭代中循环即可:

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

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

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

$results = $query->fetchAll();
$results现在是包含结果集的数组,因此:

foreach ($results as $row) ...
或者,对于MySQL,您可以使用缓冲查询:

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

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

Duplicate of:我知道,我看过这篇文章,但不知道如何使用它。如果你问同样的问题,你可能会得到同样的答案。@lvaroG.Vicario但OP ddnt.实际上,您只需使用
fetchAll
并去掉第一个循环。这比我所看到的一切都要简单,而且很有效。谢谢是的,但是对于fetchAll(),您必须像这样使用行号:$result[0],然后是$result[1]。。。但是我需要在第二个循环中为第一个循环中的数字相同的结果使用一些代码,但不是所有的结果。所以我不知道电话号码。(我不知道我是否清楚…)