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

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

干杯

PDO PHP SQLite3数据库连接常规错误14 - php

我有2个sqlite3.x数据库(来自iPhone),一个来自游戏应用程序,另一个是通讯录。我在php conf中记录日志并显示错误“ on”。使用PHP / PDO,我可以显示游戏数据库中的字段和值,包括我在结果页中捕获的图像斑点,并使用“ img src ='data:...”进行渲染。我在其他字段上使用htmlentities捕获plist二进制blo…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

SQLite PDO绑定不起作用? - php

我觉得我对此一无所知。我有三个简单的表。一个用户表,一个角色表和一个role_user表,该表以多对多关系连接用户和角色。对于用户角色,我有以下代码:$query = $pdo->prepare('select roles.* from roles inner join role_user on roles.id = role_user.ro…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…