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子句),并且可能永远不会返回任何结果。此外,PDO 不支持两次使用相同的绑定参数(您使用:password两次)。除此之外,您实际上根本不需要子查询。试试这个查询:

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 回答