adodb 库 _adodb_getcount函数的问题

stalitz stalitz 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近利用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。不知道高人们如何看?
...全文
评论 3
收藏 已收藏
分享
返回顶部
stalitz
基础编程 21,889 成员 140,329 内容