adodb 库 _adodb_getcount函数的问题

stalitz 2008-12-26 03:42:43
最近利用adodb库做分页处理,其中返回记录总数使用了_adodb_getcount函数,但我发现返回的结果和真正结果不一样,原因是我在分页查询语句里使用了limit限制最多的记录数,但在_adodb_getcount函数中有这样的处理
if (isset($rewritesql) && $rewritesql != $sql) {
if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0];
var_dump($rewritesql);
if ($secs2cache) {
// we only use half the time of secs2cache because the count can quickly
// become inaccurate if new records are added
$qryRecs = $zthis->CacheGetOne($secs2cache/2,$rewritesql,$inputarr);

} else {
$qryRecs = $zthis->GetOne($rewritesql,$inputarr);
}
if ($qryRecs !== false) return $qryRecs;
}

他把limit从我的sql语句里拆出来了,最终变成了下面这种形式。
SELECT COUNT(*) FROM ( 被他重新组织的sql ) _ADODB_ALIAS_ limit xx
COUNT(*)这样的语句应该只会返回一条记录,他把我的limit拆出来放到外面,导致我的limit不起作用,而且这个limit对这个COUNT(*)也毫无用处,不知道这个是bug还是我的用法错误?

而且由于我的sql语句中带有limit,导致翻页代码出错。我的数据库是postgresql,翻页调用了SelectLimit函数,这个函数在我的sql后边拼接了limit和offset,导致最终sql中出现两个limit所以出错。不知道这个算不算bug。我现在的处理是把_adodb_getcount中的那段给注释掉,然后在SelectLimit中把我原有的limit语句截掉。不知道我这样改会不会给其他查询带来影响。

如果按他原有的方式,我的分页查询中就不能出现limit和offset,但实际上我经常需要限制分页查询内容的总数,比如超过1000条记录就不列出来了。也许这个是bug。不知道高人们如何看?
...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
stalitz 2009-01-06
  • 打赏
  • 举报
回复
我没有直接用_adodb_getcount,我是用的PageExecute函数做分页查询。
我现在把_adodb_getcount中
if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0];
给移到
$rewritesql = adodb_strip_order_by($sql);
下面了,
然后SelectLimit中把我原有的limit语句合并了,目前没发现问题,其他查询也都正常,所以我认为这是BUG
yctin 2008-12-29
  • 打赏
  • 举报
回复
如果你打算自己拼 SQL 取得记录数
应该使用 $db->GetOne($sql);

_adodb_getcount是内部用的
phpboy 2008-12-29
  • 打赏
  • 举报
回复
UP
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧