如何重置 PDO 结果中的数组指针以进行多次迭代?

Linda Hamilton
发布: 2024-10-30 04:09:28
原创
590 人浏览过

How to Reset the Array Pointer in PDO Results for Multiple Iterations?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!