重置PDO结果中的数组指针

我无法从MySQL SELECT方法移动到PDO方法。 我想遍历一个获取的数组两次,两次从第零行开始。 在MySQL中,我会使用:

mysql_data_seek($result,0); 

使用PDO方法,我不知道如何完成同样的事情。 下面的代码是我如何试图做到这一点。 第一个while循环工作正常,但第二个while循环不返回任何内容。 有人可以告诉我哪里出错了吗?

 $pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); $stmt->execute(); while($row = $stmt->fetch()) { //do something starting with row[0] } while($row = $stmt->fetch()) { //do something else starting with row[0] } 

谢谢你的帮助。

将结果保存到一个数组,然后循环该数组两次。

 $pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); $stmt->execute(); $rows = $stmt->fetchAll(); foreach ($rows as $r) { // first run } foreach ($rows as $r) { // seconds run } 
 fetch — Fetches the next row from a result set 

所以当它退出第一个时,它已经到达你的结果集的最后一个元素,这就是为什么第二个什么时候什么也没有返回。

使用fetchAll来存储所有的结果,然后通过它们。

有时存储fetchAll()的结果不是一个选项。 相反,你可以在调用fetchAll()之前克隆pdo对象。

 $pdo_copy = clone $pdo; $num_rows = count($pdo_copy->fetchAll()); 

现在我仍然可以使用pdo对象来执行像fetchObject()这样的语句。

根据php手册,您可以多次发出查询,如果您使用PDO :: prepare()准备PDOStatement对象,则可以对PDOStatement :: execute()进行多次调用。 所以你的代码看起来就像这样。

 $stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC'); $stmt->setFetchMode(PDO::FETCH_ASSOC); //First execute $stmt->execute(); while($row = $stmt->fetch()) { //do something starting with row[0] } //Second execute $stmt->execute(); while($row = $stmt->fetch()) { //do something else starting with row[0] } 

来源: http : //php.net/manual/en/pdo.query.php

 if($stmt->fetchColumn() >= 0) { $stmt->execute(); //Reset cursor while($rs = $stmt->fetchObject()) { echo "Data: ".$rs->data; } } else { echo '0'; }