我的数据库包含表“用户”,其中不包含任何记录。我想检查电子邮件地址是否存在。
当我在 phpMyAdmin 中应用查询
SELECT COUNT(user_id) FROM users WHERE email = 'mm@mmm'
时,结果为“0”。
当我在文件中使用下面的代码时,结果为“1”,尽管表不包含任何记录。
$sql = 'SELECT COUNT(user_id) FROM users WHERE email = :email';
$query = $conn->prepare($sql);
$result = $query->execute([':email' => 'mm@mmm']);
print_r($result); // 1
当我在文件中使用下面的代码时,结果为“0”。
$sql = 'SELECT (user_id) FROM users WHERE email = :email';
$query = $conn->prepare($sql);
$query->execute([':email' => 'mm@mmm']);
$result = $query->rowCount();
print_r($result); // 0
我的问题是,第一个代码有什么问题。
第一个代码和第二个代码之间的区别在于 SQL 查询本身。
在第一个代码中:
$sql = 'SELECT COUNT(user_id) FROM users WHERE email = :email';
您正在为电子邮件与给定值匹配的记录选择
user_id
的计数。如果没有记录与电子邮件“mm@mmm”匹配,此查询将返回计数 0。因此,如果您得到的结果为“1”,则意味着表中存在匹配的记录,如果您的表应该为空,则这是意外的。
在第二个代码中:
$sql = 'SELECT (user_id) FROM users WHERE email = :email';
对于电子邮件与给定值匹配的记录,您仅选择
user_id
。如果没有记录与电子邮件匹配,则执行此查询时可能不会返回任何行。因此,结果为“0”,这对于空表来说是预期的。
如果您确定表“users”应该为空,那么第一个代码不应返回结果“1”。您可能需要仔细检查数据库的状态或 PHP 代码中使用的数据。