我试图登录一个用户,但下面的查询总是没有结果。如果我只是查询用户名,它是有效的。数据库中的一切看起来都很好。
非常感谢您的帮助!
感谢
$login = 1;
$username = 'james';
$password = 'myPassword';
if ($login == 1)
{
$pwdPassword = md5($password);
$insertUser = mysql_query("INSERT INTO users (username, password) VALUES ('$username', '$pwdPassword')");
$queryUser = "SELECT * FROM users WHERE username='$username' AND password='".md5($password)."'";
$result = mysql_query($queryUser);
if (mysql_num_rows($result) != 0)
{
echo 'success';
return;
}
else
{
echo mysql_error();
echo 'error';
return;
}
}
更新
如果我在不使用md5()的情况下尝试上面的脚本,它会很好地工作。所以我想问题出在md5()上。md5()是处理密码的最佳方法还是有更好的方法?
已编辑的解决方案
你说代码在没有md5的情况下运行良好,但在使用md5时却不起作用。当您更改代码以加密密码时,是否也将数据库条目(我想是手动的)更改为md5哈希?
请记住,md5所做的只是将您的密码变成一堆乱码。因此,您需要将该乱码存储在数据库中,并使用它与您为用户输入创建的md5哈希进行比较。
确保DB中的密码字段是CHAR(32)。
md5()创建一个32位散列
(总是32个字符),将字段的大小设置为32,以避免在插入时被截断。
除此之外,我认为剧本没有任何问题。尝试将您从数据库中提取的内容作为password和$pwdPassword进行呼应,这可以让您了解出了什么问题。
"SELECT * FROM users WHERE username='$username' AND password='".md5($password)."'";
我不认为你需要再次调用md5()函数,因为你已经声明了$pwdPassword
这可能有效:
"SELECT * FROM users WHERE username='$username' AND password='" . $pwdPassword . "'";
密码可能是一个保留名称,请尝试转义
`password`