0

ログイン機能の動作に問題があります。間違った資格情報を入力しても、常に true が返されます。これがなぜなのか誰か教えてもらえますか?

ここに関数があります

public function login($username, $password) {
    global $pdo;

    $users = new Users;
    $user_id = $users->get_user_id($username);

    $query = $pdo->prepare("SELECT * FROM `users` WHERE `username` = ? AND `password` = ?");
    $query->bindValue(1, $username);
    $query->bindValue(2, $password);
    $query->execute();

    if (!$query) {
        return false;
    }

    return $user_id;
}

そしてここにそれが実装されています。

if (isset($_SESSION['user_id']) === true) {
    header('Location: backend.php');
    exit();
} else {
if (empty($_POST) === false) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (empty($username) === true || empty($password) === true) {
        $errors[] = 'All fields are required!';
    } else {
        $login = $users->login($username, $password);

        if ($login === false) {
            $errors[] = 'Username or password incorrect!';
        } else {
            $_SESSION['user_id'] = $login;
            header('Location: backend.php');
            exit();
        }
    }
}
4

4 に答える 4

3

rowCountを使用します。あなたの状態を次のように変えてください。

if ($query->rowCount() > 0) {
    return $user_id;
}
return false;

これにより、クエリが存在するだけでなく、クエリによって実際に結果が返されていることが確認されます。

于 2013-05-02T06:00:02.933 に答える
2

PDO 実行のドキュメントを参照してください: http://php.net/manual/en/pdostatement.execute.php

クエリが成功した場合、「true」が返されます。これは、クエリが正常に実行されたことを意味し、返された結果の数については何も述べていません。何をしようとしているのかによっては、0 の結果を返すことでクエリが成功する場合があります。

于 2013-05-02T06:00:02.293 に答える