PDO 重置结果中的数组指针
在从 MySQL 到 PDO 方法的转换中,尝试迭代获取的数据时可能会遇到挑战数组两次,每次从第 0 行开始。解决方案在于了解两种方法之间的方法差异。
在 MySQL 框架下,mysql_data_seek 函数将行指针倒回到结果数组中的特定位置。然而,在 PDO 中,此功能不能直接使用。相反,可以采用两种替代技术来实现所需的结果。
将结果保存到数组
第一种方法是将结果存储在数组中,如图所示在下面的代码片段中:
$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) { // second run }
通过利用 fetchAll 方法,整个结果集存储在 $rows 数组中,允许多次迭代重置指针。
重新执行查询
或者,可以选择重新执行查询。虽然效率低于数组存储方法,但当结果集相对较小时,这种方法可能就足够了。
$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); while($row = $stmt->fetch()) { // first run } $stmt->execute(); //re-execute the query while($row = $stmt->fetch()) { // second run }
通过重新执行查询,生成一个新的结果集,指针从 row 开始零。这种方法确保两次迭代都可以访问完整的数据集。
以上是如何重置 PDO 结果中的数组指针以进行多次迭代?的详细内容。更多信息请关注PHP中文网其他相关文章!