什么是PDO可滚动游标?

22

“使用可滚动游标提取行”是什么意思?

3个回答

18
它为查询创建了一个光标,使您能够在不一次性获取整个结果的情况下迭代结果集。特别是,可滚动光标允许向后迭代。
示例用法:您可以向前滚动直到找到所需的记录,然后向后迭代以获取之前的记录(如果您也需要它们)。

2
如果您计划使用它们,还应参考实际的DBMS文档,以找出应使用哪种类型的游标。对于其中一些游标,可滚动版本比仅向前的游标甚至不可用要昂贵得多。 - VolkerK

9

Wikipedia 给出了以下内容:

使用不可滚动的光标,也称为仅向前,可以最多一次获取每行,并且光标自动移动到紧随其后的行。在检索到最后一行之后进行提取操作会将光标定位在最后一行之后,并返回 SQLSTATE 02000(SQLCODE +100)。

还有这个:

程序可以使用 FETCH SQL 语句在结果集中的任何位置定位可滚动光标。

您应该阅读早期链接的文章,但这看起来也是一些有趣的信息:

可滚动光标可能会多次访问结果集中的同一行。因此,来自其他事务的数据修改(插入、更新、删除操作)可能会对结果集产生影响。

在PHP中,您可以使用准备语句(参见PDOStatement::fetch)来使用可滚动的光标。要为您的PDOStatement对象请求可滚动的光标,您必须在使用PDO::prepare()准备SQL语句时将PDO::ATTR_CURSOR属性设置为PDO::CURSOR_SCROLL。(该页面下方还有一个示例)。有趣的是,您可以在不必获取所有数据以迭代它的情况下“滚动”浏览结果集。

3

对于MySQL ... 不支持=不可用(既不是mysql(i)也不是PDO):

mysqli_result :: data_seek(),请注意手册规定:“此函数仅适用于通过使用mysqli_store_result()或mysqli_query()函数获得的缓冲结果。”换句话说,寻求行为发生在本地缓存的结果集副本上,而不是在服务器上。因此,它不支持任何“可滚动游标”的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接