PDO SELECT的SELECT COUNT(*)和SELECT COUNT(主键)

时间:2014-01-24 08:58:23

标签: php mysql pdo

我有一个登录脚本,它接受用户的电子邮件/密码组合,对其运行选择查询,如果返回的结果数超过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(*)

1 个答案:

答案 0 :(得分:1)

来自sql_func_count

SQL COUNT(column_name)语法

COUNT(column_name)函数返回指定列的值数(不计算NULL值):

SELECT COUNT(column_name) FROM table_name;

SQL COUNT(*)语法

COUNT(*)函数返回表中的记录数:

SELECT COUNT(*) FROM table_name;

SQL COUNT(DISTINCT column_name)语法

COUNT(DISTINCT column_name)函数返回指定列的不同值的数量:

SELECT COUNT(DISTINCT column_name) FROM table_name;

注意:COUNT(DISTINCT)适用于ORACLE和Microsoft SQL Server,但不适用于Microsoft Access。

<强> MySQL的:

如果是mysql,请阅读 MySQL Performance Blog 中的以下文章 COUNT(*) vs COUNT(col)

相关问题