gpt4 book ai didi

php - 克隆PHP PDO记录集对象以计算select语句返回的行

转载 作者:行者123 更新时间:2023-12-03 18:19:34 25 4
gpt4 key购买 nike

我正在重构使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com