0

我正在为网站构建一个简单的登录功能,但遇到了一些麻烦。当我尝试登录该站点时,我不断收到用户名和密码不匹配的错误。这当然是我自己定义的错误,但问题是在这种情况下我不应该得到它。

我打印了密码的计算哈希值,并确保此步骤已正确执行,确实如此。在这之后,我跑了

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 获得了所需的结果。所以我真的不确定。任何帮助将非常感激!

4

1 回答 1

2

尝试删除引号。如果给定参数用引号括起来,PDO 不会替换它们。

例子:

$st = $db->prepare('INSERT INTO users ( name, surname ) VALUES( :name, ":surname" )');
$st->execute( array( ':name' => 'John', ':surname' => 'Carlo' ) );

结果:

->约翰,:姓

您还可以使用debugDumpParams查看参数是否正确。http://www.php.net/manual/en/pdostatement.debugdumpparams.php

于 2013-06-23T18:26:27.603 回答