PHP PDO rowCount()如何获得结果?
当在select语句之后使用时,PHP的PDO是否为它的rowCount运行静默select count*语句,还是使用其他方法获得结果PHP PDO rowCount()如何获得结果?,php,mysql,pdo,Php,Mysql,Pdo,当在select语句之后使用时,PHP的PDO是否为它的rowCount运行静默select count*语句,还是使用其他方法获得结果 $query = $conn->prepare('select name, alias from accounts where status = 0'); $query->execute(); $queryCount = $query->rowCount(); $profiles = $query->fetchAll(PDO::F
$query = $conn->prepare('select name, alias from accounts where status = 0');
$query->execute();
$queryCount = $query->rowCount();
$profiles = $query->fetchAll(PDO::FETCH_ASSOC);
if($queryCount > 0) {
print_r($profiles);
} else {
echo 'No records found';
}
在上面的代码中,一切运行正常,我能够得到正确的行数作为结果。但是里面有计数语句吗?PHP是如何做到这一点的?来自PHP的文档:
PDOStatement::rowCount返回受相应PDOStatement对象执行的最后一条DELETE、INSERT或UPDATE语句影响的行数
发件人:
示例2计算SELECT语句返回的行数
对于大多数数据库,PDOStatement::rowCount不返回
受SELECT语句影响的行数
意思是:您可能不依赖于您当前实施的内容 编号来源:
对于大多数数据库,PDOStatement::rowCount不会返回受SELECT语句影响的行数。相反,请使用PDO::query发出一个SELECT COUNT*语句,该语句的谓词与您想要的SELECT语句相同,然后使用PDOSTATENT::FETCHTCOLUMN检索将返回的行数。然后,应用程序可以执行正确的操作
在不推荐使用的PHP函数中,使用了MySQL函数。我想PDO也会这么做
可以找到更多信息
注意:这意味着您当前的代码在某些情况下可以工作,但您不能依赖它。改用COUNT*查询。这实际上取决于PDO数据库驱动程序。不管手册怎么说,它通常适用于MySQL连接。不管怎样,用最新版本的mysqlnd。旧版本和旧libmysqlclient接口可以用PDO::MYSQL_ATTR_FOUND_行初始化,以还返回SELECT语句的行计数 当您请求->行计数时,没有自动选择计数重新查询。驾驶员接收并保存uint64行计数;内部。服务器的响应几乎总是如此 对于->fetchAll和iterations,PDO mysqlnd驱动程序甚至只是手动设置->行数++计算它。 看看到底发生了什么
较旧的mysql驱动程序调用,它仅在获取所有行后返回正确的结果计数。您是否只询问PDO mysql驱动程序?计数用于查询中对符合条件的行进行计数。rowcount返回受修改行的查询影响的行数。由于您使用的是fetchAll,因此在本例中使用rowcount是没有用的。您只需执行查询、调用fetchAll和执行ifcount$profiles。但是,不,PDO不进行魔法选择计数*。某些数据库可以返回元信息,如受影响的行数等,如果返回,PDO可以向您公开这些信息。然而,如果你不依赖魔法或行数,这是最好的。您可以在大多数用例中避免它,并实现更清晰、更容易理解的代码。。。和->行数;由数据库执行。不同之处在于,第一条语句提供了sql语句中指定的准确记录数,第二条语句只要求DB提供受我刚才执行的最后一条语句影响的记录数,正如文档所指出的,这可能不可靠。绝对正确。在任何情况下,都应该使用数据库来计算这个数字,因为它比PHP或其他客户机实现更有效。