【发布时间】:2014-04-18 15:39:59
【问题描述】:
这肯定以前出现过,但我还没有找到解决方案。我正在尝试从数据库中选择用户名和密码来验证用户一个简单的登录脚本。它应该简单地在用户表中找到与通过登录表单提交的用户名和密码匹配的行。
我可以毫无问题地匹配用户名,但不能匹配密码,我不知道为什么。
该表包含名为“用户名”和“密码”的列,表中只有 1 行用户名“admin”和密码“testpassword”。
这是包含三个选项的函数 - 选项 1 和 4 有效,其他两个无效。选项 2 与选项 1 相同,只是它查找不同的列。我检查了查询中的列名是否与表中的列匹配,并且提交的值是否匹配。我没有收到任何错误消息,也看不到可能有什么问题(我敢肯定,这是基本的……)。
function new_session ($username, $pw, $inactive) {
// echo statements verify that variable match database values
echo "<h2>username = " . $username . "</h2>";
echo "<h2>password = " . $pw . "</h2>";
echo "<h2>inactive = " . $inactive . "</h2>";
$db = mydb::getConnection();
//option 1
$statement = $db->prepare('SELECT * FROM users WHERE username = :parameter');
$statement->bindValue(':parameter', $username);
//option 2
//$statement = $db->prepare('SELECT * FROM users WHERE password = :parameter');
//$statement->bindValue(':parameter', $pw);
//option 3
//$statement = $db->prepare('SELECT * FROM users WHERE password = :parameter1 AND username = :parameter2');
//$statement->bindValue(':parameter1', $username);
//$statement->bindValue(':parameter2', $pw);
//option 4
//$statement = $db->prepare('SELECT * FROM users WHERE username = "admin" AND password = "testpassword"');
$statement->execute();
$row = $statement->fetchAll();
if (count($row) == 1) {
// SESSION data is set here for options 1 and 4
}
}
【问题讨论】:
-
密码是否以加密形式存储?
-
尝试对查询进行故障排除时。我尝试以纯文本形式编写查询并运行它。如果我不能得到这样的结果,那么我需要在尝试以代码形式编辑之前编辑我的基本查询
-
选项 3 的参数顺序错误。参数 1 应该是 pw,参数 2 应该是用户名。那应该可以正常工作