Php 为什么PDO返回的结果不应该返回?

Php 为什么PDO返回的结果不应该返回?,php,mysqli,pdo,resultset,Php,Mysqli,Pdo,Resultset,我只有一个文本字段,用户可以在其中输入用户名或电子邮件地址来重置密码 首先是代码:我只包含了我知道问题所在的代码 try { // connect to database $dbh = sql_con(); // prepare query $stmt = $dbh->prepare(" SELECT COUNT(*) FROM

我只有一个文本字段,用户可以在其中输入用户名或电子邮件地址来重置密码

首先是代码:我只包含了我知道问题所在的代码

try {

    // connect to database
    $dbh = sql_con();

    // prepare query
    $stmt = $dbh->prepare("
                     SELECT COUNT(*)
                     FROM
                         users
                     WHERE
                         user_login = :username
                     OR
                         user_email = :email
                     ");

    // execute query
    $stmt->execute(array(':username' => $username_email, ':email' => $username_email));

    if ($stmt->fetchAll() > 0) {

        // something was found
        // just echoing at the moment until i figure out what i am doing wrong
        echo 'i found something';
        exit;

    } else {
        // nothing found
        echo 'i found nothing';
        exit;
    }

}
catch (PDOException $e) {

    ExceptionErrorHandler($e);
    require_once($footer_inc);
    exit;
}
不确定我做错了什么,可能是一些非常愚蠢的事情,但当我输入一个我知道不在数据库中的用户名或电子邮件地址时,它仍然会回显我发现了一些东西

我做错了什么

我打算使用rowCount,但正如PHP手册所建议的,它指出:

PDOStatement::rowCount返回受相应PDOStatement对象执行的最后一条DELETE、INSERT或UPDATE语句影响的行数。 如果关联的PDO语句执行的最后一条SQL语句是SELECT。 语句时,某些数据库可能返回该语句返回的行数。 但是,并非所有数据库都能保证这种行为,便携式应用程序也不应依赖这种行为

因此,PHP手册基本上是说,在执行真正的查询之前,我应该先做一个计数*然后再处理结果。

你的意思是如果Count$stmt->fetchAll>0{

你的意思是如果Count$stmt->fetchAll>0吗{

这是因为fetchAll返回一个数组。即使查询结果没有行,也至少会得到一个空数组,并且

php > var_dump(array() > 0);
bool(true)
你需要做什么

if ($stmt->rowCount > 0) { ... }
相反。此外,您正在进行计数*,因此无论匹配的是什么,您都将得到一个包含匹配计数的单行结果。您需要获取这一行,并检查该已计数字段的值。

这是因为fetchAll返回一个数组。即使查询结果没有行,也至少会得到一个空数组,即d、

php > var_dump(array() > 0);
bool(true)
你需要做什么

if ($stmt->rowCount > 0) { ... }

相反。此外,您正在进行计数*,因此无论匹配的是什么,您都将得到一个包含匹配计数的单行结果。您需要获取这一行,并检查该已计数字段的值。

$statement->fetchAll将返回一个数组。将其与0进行比较没有意义。您可能是想对该数字进行计数从$statement->fetchAll->fetchAll返回的resultset中的元素的个数将返回一个数组。将其与0进行比较毫无意义。您可能想计算从$statement->fetchAll->fetchAll返回的resultset中的元素个数。问题中提到了他为什么不使用该数组。这就是我投票反对的原因。问题中提到了他为什么不使用这个。这就是我投票反对的原因。谢谢你…我把代码改成了你上面展示的,改成了SQL查询,现在它可以工作了。谢谢你,phploverthank你…我把代码改成了你上面展示的,改成了SQL查询,现在它可以工作了。谢谢你,phplover