我正在为网站构建一个简单的登录功能,但遇到了一些麻烦。当我尝试登录该站点时,我不断收到用户名和密码不匹配的错误。这当然是我自己定义的错误,但问题是在这种情况下我不应该得到它。
我打印了密码的计算哈希值,并确保此步骤已正确执行,确实如此。在这之后,我跑了
SELECT * FROM members WHERE user='username' AND pass='hashed_password';
直接指向我的 MySQL 数据库,直接提供用户名和哈希。这返回了所需的值。我的 PHP 代码如下所示:
$dsn = "mysql:host=localhost;dbname=my_db";
$u = "localhost";
$pdo = new PDO($dsn,$u);
$query = $pdo->prepare("SELECT * FROM members WHERE user=':username' AND pass=':hashed_pass'");
$query->execute(array(':username'=>$username,':hashed_pass'=>$hashed_pass));
$result = $query->fetch();
if($result){
//Log in user
}else{
//Print error
}
这不会返回任何东西,即使我提供了正确的值,它也会不断给我错误。我不确定是什么导致了这个问题,但如果我猜测一下,我会说它与字符集有关。我的数据库使用UTF-8。虽然,通过使用ISO-8859编码的 SSH 直接查询数据库时,我仍然从 MySQL 获得了所需的结果。所以我真的不确定。任何帮助将非常感激!