Php 经常使用的PDO行计数

Php 经常使用的PDO行计数,php,mysql,pdo,mariadb,rowcount,Php,Mysql,Pdo,Mariadb,Rowcount,我经常使用PDO的函数rowCount,例如: $sql = $dataBase->prepare('SELECT email, firstname, lastname FROM pr__user WHERE id = :id'); $sql->execute(array('id' => $_SESSION['user_id'])); $rowCount = $sql-

我经常使用PDO的函数rowCount,例如:

$sql = $dataBase->prepare('SELECT email, firstname, lastname
                           FROM pr__user
                           WHERE id = :id');

$sql->execute(array('id' => $_SESSION['user_id']));
$rowCount = $sql->rowCount();
它一直运行良好,但我在PHP手册中看到:

如果关联的PDO语句执行的最后一条SQL语句为 对于SELECT语句,某些数据库可能返回行数 由该声明返回。然而,这种行为不能保证 适用于所有数据库,不应依赖于 应用。


它与MySQL和MariaDB配合使用效果很好,所以我继续使用它。当我使用它作为一个我希望可移植的应用程序时,我应该修改我的代码吗?

您缺少的是PDO是一个接口,而不仅仅是MySQL。它们不能保证函数将在完全不同的后端返回相同类型的值

这就是可移植应用程序的含义:如果希望代码在任意数据库上普遍运行,则可能需要避免使用该函数。如果不是这样,那么您不是在编写通用库代码,您可以依赖MySQL的特定行为


只要确保测试您正在做的任何事情,以确保假设是合理的。

我从不要求行数。查询总是以某种格式返回一个结果行数组,我可以简单地询问数组中有多少行,比如PHP的count。。功能。

相反,它只是。您正在毫无理由地膨胀代码

从您的示例中可以明显看出,您将使用选定的数据,否则选择电子邮件没有意义。因此,这意味着您可以一直使用该数据而不是行计数。假设下一个操作符是fetch,则可以省略rowCount

$sql = $dataBase->prepare('SELECT email, firstname, lastname
                       FROM pr__user
                       WHERE id = :id');

$sql->execute(array('id' => $_SESSION['user_id']));
$user = $sql->fetch();
if ($user) { ...
从现在起,您可以在使用$rowCount的每个条件下使用$user。这仅仅是因为这里实际上不需要计数,而是需要一个布尔标志,在这个标志中,数组与整数一样有效


即使在不需要电子邮件但只需要知道用户是否存在的情况下,您也可以只选择一个标量值,然后获取它-这样您的代码就可以保持统一。

如果它没有损坏,为什么要修复它?。。。我应该修改代码吗?-这是基于意见的。但是你可以把你的问题改写成这样的问题,比如什么是风险……是的,但我的意思是,在这个函数的一些评论中,人们说MySQL似乎没有返回任何rowCount。但现在它起作用了!所以,也许它适用于大多数数据库,不是吗?我认为这只是一个警告,这样当PDO+2002版Sybase最终产生意外结果时,人们就不会感到惊讶了。你为此做了一个小动作吗?像这样:$result=$sql->fetchALL?