检查PDO是否存在行

时间:2012-08-01 19:28:26

标签: php

我无法检查是否存在记录某人的行。 密码使用密码+电子邮件在数据库中加密 我正在使用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;   
    }
}

1 个答案:

答案 0 :(得分: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语句游标之后将其打开可能会导致数据库在所有将来的查询上失败。