MySQL通过PHP查询不返回值

时间:2013-06-23 18:17:26

标签: php mysql encoding

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

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

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
}

这不会返回任何内容,即使我提供了正确的值,它仍然会给我错误。我不确定是什么原因引起了这个问题,但如果我猜错了,我会说它与charsets有关。我的数据库使用 UTF-8 。虽然,我通过使用 ISO-8859 编码的SSH直接查询数据库时仍然得到了MySQL的预期结果。所以我真的不确定。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

尝试删除引号。如果PDO用引号括起来,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