0

誰かにログインするための行が存在するかどうかを確認するのに問題があります。パスワードは、パスワードとPDOを使用している電子メールを使用してデータベースにソルトされます。

function is_valid_developer($username, $password)
{
    global $db;
    $query = 'SELECT COUNT(*) FROM users WHERE username = :username AND password = sha(CONCAT(:password,(SELECT email FROM users WHERE username = :password))) AND developer = true';
    $statement = $db->prepare($query);
    $statement->bindValue(':username', $username);
    $statement->bindValue(':password', $password);
    $statement->execute();
    $count = $statement->fetchColumn();
    if ($count === 1)
    {
        return TRUE;
    }
    else 
    {
        return FALSE;   
    }
}
4

1 に答える 1

4

サブクエリが正しくないように見え(WHERE username = :password句を参照)、結果が返されない可能性があります。さらに、同じバインドされたパラメーターを2回使用することは、PDOではサポートされていません(:password2回使用します)。それ以外に、実際にはサブクエリはまったく必要ありません。このクエリを試してください:

SELECT COUNT(*) FROM users
WHERE username = :username
  AND password = sha(CONCAT(:password, email))
  AND developer;

$statement->closeCursor()さらに、;への呼び出しの後に必ず呼び出してください$statement->fetchColumn()完了後にPDOステートメントカーソルを開いたままにしておくと、今後のすべてのクエリでデータベースが失敗する可能性があります。

于 2012-08-01T19:31:40.803 に答える