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。不知道高人们如何看?
...全文
150 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

21,886

社区成员

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

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