Php 带绝对位置游标的PDO pgsql获取失败

Php 带绝对位置游标的PDO pgsql获取失败,php,postgresql,pdo,Php,Postgresql,Pdo,我正在尝试使用PDO创建游标的能力来实现分页功能 目前,我的代码看起来有点像这样(非常复杂,我知道): $pdo=new pdo(); $pdo->setAttribute(pdo::ATTR\u CURSOR,pdo::CURSOR\u SCROLL); //省略已准备的选择查询 $pdo语句=$pdo->execute(); $start\u index=MAX\u THINGS\u PER\u PAGE*$current\u PAGE-MAX\u THINGS\u PER\u PAGE;

我正在尝试使用PDO创建游标的能力来实现分页功能

目前,我的代码看起来有点像这样(非常复杂,我知道):

$pdo=new pdo();
$pdo->setAttribute(pdo::ATTR\u CURSOR,pdo::CURSOR\u SCROLL);
//省略已准备的选择查询
$pdo语句=$pdo->execute();
$start\u index=MAX\u THINGS\u PER\u PAGE*$current\u PAGE-MAX\u THINGS\u PER\u PAGE;
$stop\u index=MAX\u THINGS\u PER\u PAGE*$current\u PAGE;
$row_count=$this->statement->rowCount();//适用于PgSQL驱动程序
$index=$start\u索引;
而(($row\u count>0)和($index<$stop\u index))
{
//省略try catch块
$values[]=$this->statement->fetch(PDO::fetch_ASSOC,PDO::fetch_ORI_ABS,$index);
--$row_计数;
++美元指数;
}
但是,看起来,不管$start\u索引是什么,查询都只获取结果集的前10行(即每个页面的MAX\u THINGS\u值)。总是


也许我做错了什么,但是使用光标分页的艺术似乎有点神秘,而且没有得到充分的证明……

我今天遇到了这个问题。PDOStatement::rowCount()不适用于某些数据库上的SELECT。发件人:

如果关联的PDO语句执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都能保证这种行为,便携式应用程序也不应依赖这种行为

我花了很多时间才意识到这一点,因为我认为这是使用游标的问题

这就是我采用的方法:将PDOStatement::rowCount()的使用替换为以下内容:

<?php
$row_count = count($stmt->fetchAll());
?>

它在内存方面效率不高,但许多数据库都是这样计算总行数的

<?php
$row_count = count($stmt->fetchAll());
?>