【发布时间】:2013-12-16 23:20:36
【问题描述】:
这是我第一次尝试使用命名占位符,所以我确定我在某处有语法错误......我只是没有看到它。我按照我找到的here 的指示进行操作。如果密码与 $pass 匹配,我希望数组 $authResults 包含具有 $user 信息的行。
如果我的查询只是SELECT * FROM user 它可以工作。显然,这在生产环境中是行不通的。 :-)
这是我目前所拥有的:
$user= "Test";
$pass= "ba6c064dfdb1b7b4938bf82585a8332c89270303b6d75007f0b25feffe33b90bd34d3732acf4be708c85708c39ff6c28b87235663238b8fbfe2c4439258cc883";
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'admin', 'pass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//query database to see if username/password match up
$authQuery = $db->prepare("SELECT * FROM user WHERE username=:usr AND password=:pwd"); // search for username and password
$authQuery->bindValue(':usr', $user, PDO::PARAM_STR);
$authQuery->bindValue(':pwd', $pass, PDO::PARAM_STR);
$authQuery->execute();
$authResults = $authQuery->fetchAll(PDO::FETCH_ASSOC);
echo "<br><br>authResults:<pre>";
print_r($authResults);
echo "</pre>";
想法?
这是在我的文件末尾回显的输出:
authResults:
Array
(
)
没有错误消息。 PHP 变量或 MySQL 查询是否有字符限制?
【问题讨论】:
-
您遇到什么错误?什么没有按预期工作?您是否考虑过实际尝试验证准备好的语句、查询执行等。给出预期的结果?就目前而言,在继续执行之前,您的代码不会显示任何尝试验证您是否获得了预期的结果。
-
print_r()不是你想要的。使用 while 循环。 -
您是否尝试过
var_dump($authQuery->errorInfo());来查看错误?您确定您的字段名为username和password? -
@PHPglue
print_r将显示一个数组就好了 -
另一种可能性是查询正在运行,但根本没有与您正在搜索的值匹配的行。我建议只搜索用户名而不是密码来测试它。然后打印它找到的密码(当然,仅在您的开发中,而不是在您的生产站点上)并查看它是否与您期望的哈希值匹配。