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