为什么获胜';t这个简单的查询工作


Why won't this simple query work?

我试图登录一个用户,但下面的查询总是没有结果。如果我只是查询用户名,它是有效的。数据库中的一切看起来都很好。

非常感谢您的帮助!

感谢

$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`