为什么这个简单的查询不起作用?

时间:2012-03-27 07:19:55

标签: php mysql

我正在尝试登录用户,但我总是从下面的查询中得不到任何结果。如果我只是查询用户名,它就可以了。数据库中的一切看起来都很好。

非常感谢任何帮助!

由于

$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()是处理密码的最佳方式还是有更好的方法?

3 个答案:

答案 0 :(得分:2)

编辑解决方案

你说代码在没有md5的情况下工作正常,但它不适用于md5。当您更改代码以加密密码时,您是否也将数据库条目(我想手动)更改为md5哈希?

请记住,所有md5都会将您的密码变成一堆乱码。因此,您需要将这些乱码存储在数据库中,并使用它来与您创建的用户输入的md5哈希进行比较。

确保您的数据库中的密码字段为CHAR(32)。

  

md5()创建一个32位哈希

(总是32个字符),将字段的大小设置为32,以避免在插入字段时被截断。

除此之外,我没有看到脚本有任何问题。尝试回复你从数据库中取出的密码和$ pwdPassword - 这可以让你知道出了什么问题。

答案 1 :(得分:1)

"SELECT * FROM users WHERE username='$username' AND password='".md5($password)."'";

我不相信你需要再次调用md5()函数,因为你已经声明了$ pwd密码这可能有效:

"SELECT * FROM users WHERE username='$username' AND password='" . $pwdPassword . "'";

答案 2 :(得分:1)

密码可能是保留名称,请尝试转义

`password`