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() 支持的数据库的主要内容,如果未能解决你的问题,请参考以下文章

PDO rowCount()始终返回1

PDO rowCount 仅返回一个 [重复]

PHP PDO Update语句总是返回0行受影响的rowCount()

PHP PDO rowCount 在 SELECT 语句上返回 -1

使用 PDO 匹配数据库中的行时遇到问题

怎么用PDO得知数据库中某个表的总行数