我正在重构使用adodb作为db库的PHP应用程序的一部分,以便开始使用PDO。
我需要一些可以提供选择记录集中包含的行数的东西,这些东西可以轻松替换我以前使用的旧$rs->RecordCount()
adodb方法。它应该适用于sqlite3。
我不能简单地重新执行查询(或使用select count(*)
重新执行查询),因为我不能对原始应用程序进行太多更改,因此该应用程序在很多地方都调用了函数get_num_rows($rs)
(其中仅包含$rs->RecordCount()
),我可以更改该函数的内容。
我尝试克隆记录集对象并计算获取的记录:
function get_num_rows($rs)
{
$rs_copy = clone $rs;
return (count($rs_copy->fetchAll()));
}
但这不起作用,因为
$rs_copy->fetchAll()
返回了我false
。我无法在原始记录集上执行此操作,因为稍后在应用程序中,我需要再次获取它,并且我认为PDO sqlite无法重用记录集(如果我错了,请纠正我)。你有什么解决办法?
最佳答案
在主查询中使用SELECT COUNT(*) FROM
时,建议使用LIMIT
作为第二个查询来计算结果集中的行数。它不会两次获取相同的数据,它只会计算找到的行数并返回1行(整数)。使用LIMIT
语句时查找行数的另一种方法是在第一个查询中使用SELECT SQL_CALC_FOUND_ROWS (field list) FROM ...
,然后运行SELECT FOUND_ROWS()
来获取行数,但是,此方法比前面提到的慢。请注意,在PHP中运行count()
仅会给您返回的行数,而不是在数据库中找到的实际行数(如果使用的是LIMIT
)。
干杯
关于php - 克隆PHP PDO记录集对象以计算select语句返回的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768606/