MySQL查询,但PHP不返回值


MySQL query though PHP not returning values

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

我打印了计算出的密码哈希,并确保正确执行了这一步骤。之后,我运行

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

尝试删除引号。如果给定参数被引号包裹,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