PDO rowCount() 支持的数据库
Posted
技术标签:
【中文标题】PDO rowCount() 支持的数据库【英文标题】:PDO rowCount() Supported Databases 【发布时间】:2015-07-04 01:10:41 【问题描述】:我只是在使用 PDO 的 rowCount() 方法查找支持的数据库列表。我知道这听起来像是一个 RFTM 问题,但老实说,我根本找不到与它将在哪些特定数据库上工作有关的任何信息。我所知道的只是手册中的这一点:
PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。
如果关联 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,某些数据库可能会返回该语句返回的行数。但是,这种行为并不能保证适用于所有数据库,并且不应依赖于可移植应用程序。
我也知道这在 mysql 中有效,在 MS Server 上无效,但是 PDO 支持的其他数据库呢?
【问题讨论】:
我不确定这是否有帮助,行为也可能在版本之间发生变化,因此不依赖它似乎是最好的选择。 【参考方案1】:由于这个记录在案的限制,并且认识到当前所有计算机都有大量内存、最便携且在大多数情况下速度最快,因此实施是发出$result = $stmt->fetchAll()
,然后使用count($result)
。
在我看来,代码看起来也更简洁,因为通过返回值的循环变成了一个简单的foreach($result as $row)
。这是一个更快的实现,原因有两个:
fetchAll
,例如 MySQL 记录在这种情况下缓冲结果
通过记录的循环不涉及将脚本调用到驱动程序。
既然您几乎肯定会在完成对最终用户的回复之前阅读回复的每一行,为什么不通过一次调用驱动程序来一次完成所有操作呢?以独立于 DB 的方式为 SELECT
实现 rowCount
需要发出单独的 SELECT COUNT(*)
请求。
驱动程序执行SELECT COUNT(*)
所花费的精力几乎与实际的SELECT
一样多,因此处理请求的时间将加倍。
【讨论】:
以上是关于PDO rowCount() 支持的数据库的主要内容,如果未能解决你的问题,请参考以下文章
PHP PDO Update语句总是返回0行受影响的rowCount()