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

标签 php sqlite pdo

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

相关文章:

php - 根据多个列值对数组行进行分组和过滤

php - MySQL队列查询吗?

c - 在C中从sqlite3获取数据

python - Sqlite3语句创建表命名参数

php列出多次使用相同IP地址注册的用户

php - 在 PHP 数据库中插入 jQuery 重复器行

php - 获取所有记录json_encode

php - 无法在实时环境中使用 SmtpTransport 使用 SwiftMailer 发送邮件,但可以在本地主机中发送

php - 如何通过 PHP 将数据从 PostgreSQL 发送到 Android?

python - 从 SQL 数据库中的 OHLC 数据中选择 7、14、20、50、200 天的价格。