我经常使用PDO的函数rowCount,例如:
qr//
它的工作时间很好,但我在PHP手册中看到了:
如果关联的PDOStatement执行的最后一条SQL语句是 一个SELECT语句,一些数据库可能会返回行数 由该声明返回。但是,不保证这种行为 适用于所有数据库,不应依赖于便携式数据库 应用。 http://php.net/manual/en/pdostatement.rowcount.php
它适用于MySQL和MariaDB,所以我继续使用它。当我使用它我希望便携的应用程序时,我应该修改我的代码吗?
答案 0 :(得分:1)
我从不要求行数。查询总是返回一个结果行数组(以某种格式),我可以简单地询问数组中有多少行 - 例如使用PHP的count(..)
函数。
答案 1 :(得分:0)
您缺少的是PDO是many different databases的接口,而不仅仅是MySQL。它们不保证函数将在完全不同的后端返回相同类型的值。
对于便携式应用程序来说,这就是""意味着:如果您希望代码在任意数据库上普遍运行,则可能需要避免使用该功能。如果情况并非如此,那么您不会编写通用库代码,您可以依赖于MySQL的特定行为。
请务必测试您正在做的事情,以确保假设是合理的。
答案 2 :(得分:0)
相反,它只是pointless and superfluous。你无缘无故地膨胀你的代码。
从您的示例中可以明显看出您将使用所选数据(否则选择电子邮件没有意义)。因此,这意味着您可以一直使用该数据而不是行数。假设下一个运算符是fetch(),则可以省略rowCount()
SELECT
name,
sum(IF(leavetype="Earned",Stock-Consumed,0)) as Earned,
sum(IF(leavetype="Casual",Stock-Consumed,0)) as Casual,
sum(IF(leavetype="Sick",Stock-Consumed,0)) as Sick
from leaverecord
GROUP BY 1;
和从现在开始,您可以在每个条件中使用$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
标量值然后获取它 - 这样您的代码就会保持一致。