什么是 PDO 可滚动游标?

发布于 2024-07-27 22:40:06 字数 25 浏览 3 评论 0原文

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

What is "Fetching rows with a scrollable cursor" all about?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

〆一缕阳光ご 2024-08-03 22:40:07

维基百科给出了这个:

对于不可滚动的光标,也
称为仅前向,可以 FETCH
每行最多一次,并且光标
自动移动到立即
下一行。 之后的获取操作
最后一行已被检索
将光标定位在最后一个之后
行并返回 SQLSTATE 02000
(SQLCODE +100)。

和这个 :

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

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

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

在 PHP 中,您可以通过使用准备好的语句将可滚动游标与 PDO 结合使用(请参阅 PDOStatement: :获取):

请求可滚动光标
您的 PDOStatement 对象,您必须设置
PDO::ATTR_CURSOR 属性
PDO::CURSOR_SCROLL 当你准备时
使用 PDO::prepare() 的 SQL 语句。

(该页面下方还有一个示例)

似乎有趣的是能够“滚动”结果集,而无需获取内存中的所有数据来迭代它。

Wikipedia gives this :

With a non-scrollable cursor, also
known as forward-only, one can FETCH
each row at most once, and the cursor
automatically moves to the immediately
following row. A fetch operation after
the last row has been retrieved
positions the cursor after the last
row and returns SQLSTATE 02000
(SQLCODE +100).

And this :

A program may position a scrollable
cursor anywhere in the result set
using the FETCH SQL statement.

You should read the article linked earlier, but this looks like some interesting information too :

Scrollable cursors can potentially
access the same row in the result set
multiple times. Thus, data
modifications (insert, update, delete
operations) from other transactions
could have an impact on the result
set.

In PHP, you can use scrollable cursors with PDO by using prepared statements (see PDOStatement::fetch) :

To request a scrollable cursor for
your PDOStatement object, you must set
the PDO::ATTR_CURSOR attribute to
PDO::CURSOR_SCROLL when you prepare
the SQL statement with PDO::prepare().

(there is also an example further down that page)

What seems interesting is the ability to "scroll" through the resultset, without having to get all the data in memory to iterate over it.

故乡的云 2024-08-03 22:40:07

对于 Mysql ... 不支持 = 不可用(mysql(i) 和 PDO 都不是):

mysqli_result::data_seek(),请注意手册中指出:“此函数只能与通过使用 mysqli_store_result 获得的缓冲结果一起使用() 或 mysqli_query() 函数。” 也就是说,查找发生在结果集的本地缓存副本上:而不是在服务器上。 因此它不支持任何“可滚动光标”的建议。

For Mysql ... not supported = not available (neither mysql(i) nor PDO):

mysqli_result::data_seek(), note that the manual states: "This function can only be used with buffered results attained from the use of the mysqli_store_result() or mysqli_query() functions." That is, the seeking takes place on a locally cached copy of the resultset: not on the server. Thus it does not support any suggestion of a "scrollable cursor".

淡紫姑娘! 2024-08-03 22:40:06

它为查询创建一个游标,它允许您迭代结果集而无需立即获取整个结果。 具体来说,可滚动光标是一种允许向后迭代的光标。

使用示例:您可以向前滚动,直到找到所需的记录,然后迭代返回以获取以前的记录(如果您也需要它们)。

It creates a cursor for the query, which allows you to iterate over the result set without fetching the whole result at once. A scrollable cursor, specifically, is one that allows iterating backwards.

Example use: You can scroll forward until you find the record you need and iterate back to fetch the previous records, if you need them, too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文