Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO rowCount()如何获得结果?_Php_Mysql_Pdo - Fatal编程技术网

PHP PDO rowCount()如何获得结果?

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

当在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::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或其他客户机实现更有效。