0

ユーザーがユーザー名またはメールアドレスを入力してパスワードをリセットできるテキストフィールドが1つだけあります。

最初にここにコードがあります:(問題がどこにあるかを知っているコードのみを含めました)。

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;
}

何が間違っているのかわからない、おそらく非常にばかげていることですが、データベースにないことがわかっているユーザー名または電子メールアドレスを入力すると、echo何かが見つかりました

私が間違っていることは何ですか?

私は使用するつもりでしたrowCountが、PHPマニュアルで示唆されているように、次のように述べています。

PDOStatement::rowCount()対応するPDOStatementオブジェクトによって実行された最後の、、、またはステートメントの影響を受ける行数をDELETE返しINSERTますUPDATE
関連付けられたによって実行された最後のSQLステートメントPDOStatementがであった場合SELECT
ステートメントの場合、一部のデータベースは、そのステートメントによって返される行数を返す場合があります。
ただし、この動作はすべてのデータベースで保証されているわけではなく、ポータブルアプリケーションでは信頼できません。

したがって、基本的にPHPマニュアルにはCount(*)、実際のクエリを実行する前に実行してから結果を処理する必要があると書かれています。

4

3 に答える 3

3

これfetchAll()は、配列を返すためです。クエリ結果に行がない場合でも、少なくとも空の配列を取得し、...

php > var_dump(array() > 0);
bool(true)

あなたがする必要があります

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

代わりは。さらに、を実行しているCOUNT(*)ため、一致するものに関係なく、一致したカウントを含む単一行の結果が得られます。その1つの行をフェッチし、そのカウントされたフィールドの値を確認する必要があります。

于 2012-04-17T16:34:42.290 に答える
3

多分意味ですかif (count($stmt->fetchAll()) > 0) {

于 2012-04-17T16:34:05.550 に答える
0

$statement -> fetchAll () will return an array. Comparing it to 0 makes no sense. You probably meant to count() the number of elements in the resultset returned from $statement -> fetchAll ()

于 2012-04-17T16:36:12.463 に答える