繁体   English   中英

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

[英]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;

    }



}

UPDATE

如果我尝试上面的脚本,而不使用md5(),它工作正常。 所以我猜问题是md5()。 md5()是处理密码的最佳方式还是有更好的方法?

编辑解决方案

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

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

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

md5()创建一个32位哈希

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

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

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

我不相信你需要再次调用md5()函数,因为你已经声明了$ pwdPassword

这可能有效:

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

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

`password`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM