【发布时间】:2014-01-24 08:58:22
【问题描述】:
我有一个登录脚本,它采用用户的电子邮件/密码组合,在其上运行选择查询,如果返回的结果数超过 1,则将用户登录。
脚本示例:
require("dbconnection.inc");
$email=$_POST['email'];
$pw=$_POST['pw'];
$login=$connection->prepare("SELECT `Password` FROM `Users` WHERE `Email`=:email");
$login->bindValue(":emailuser",$loginemail);
$login->execute();
$verifyemail=$loginuser->rowCount();
if($verifyemail > 0)
{
//Login user
}
但是,我在 PHP 手册中看到 rowCount() 不应该与 PDO 一起使用,因为并非所有数据库都支持它,并且
$count = $pdo->query('select count(*) FROM blah WHERE blah')->fetchColumn();
echo $count;
应该改为使用。
但是,我想知道我是否可以简单地使用count(PrimaryKey) 代替count(*)。是否可以使用count(PrimaryKey) 代替count(*) 以及是否有任何缺点?
P.S 我目前正在使用 MYSQL,rowCount 工作正常,我不确定是否应该将当前代码更改为 COUNT(*)。
【问题讨论】:
-
是的,如果您愿意,可以使用
COUNT(id)。就我个人而言,我总是只计算 id(或其他字段)而不是使用*选项。 -
通常认为使用
count(PrimaryKey)甚至count(1)更有效...尽管我相信一些数据库现在已经优化count(*)以匹配其他两个变体的效率