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