检查数据库中是否存在电子邮件地址时结果错误

问题描述 投票:0回答:1

我的数据库包含表“用户”,其中不包含任何记录。我想检查电子邮件地址是否存在。

当我在 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

我的问题是,第一个代码有什么问题。

php count
1个回答
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 代码中使用的数据。

© www.soinside.com 2019 - 2024. All rights reserved.