PHP PDO MySQL可滚动游标不起作用

Posted

技术标签:

【中文标题】PHP PDO MySQL可滚动游标不起作用【英文标题】:PHP PDO MySQL scrollable cursor doesn't work 【发布时间】:2012-08-16 04:40:51 【问题描述】:

例如,我有一个包含两个字段的表:id、value。我在这个表中插入了将近 100k 行。

我想使用可滚动光标。我写了以下代码:

<?php
...
$sql = 'SELECT id FROM cursor_test;';
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, 3);
var_dump($row['id']); // 1, expected value is 3

我做错了什么?

【问题讨论】:

【参考方案1】:

好像mysql不支持可滚动游标。

https://bugs.php.net/bug.php?id=34625

http://www.php.net/manual/en/pdostatement.fetch.php#105277

Will PDO laststatment->fetchAll(PDO::FETCH_COLUMN, $column) rerun the query each call?

【讨论】:

也许吧,但是这个bug是在2005年报告的。MySQLi扩展怎么样?我看到有设置搜索的功能......你知道吗? 我以前用过mysql扩展(不是mysqli),它也有seek功能。老实说,我不知道它是如何工作的,但我没有在网上找到任何在 PDO 中提供类似功能但只是获取所有结果等解决方法的东西。 @egemadra mysql 的data_seek() 函数获取所有行。它看起来像一个光标,但实际上不是。

以上是关于PHP PDO MySQL可滚动游标不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 连接 Mysql 数据库不起作用

使用php pdo选择原始计数不起作用[重复]

PHP:PDO foreach 不起作用

为啥这种使用 PDO 计算 Mysql 行数的方法不起作用? [关闭]

PHP PDO事务回滚不起作用

我的 pdo 连接不起作用