我需要检查值是否相同。如果$_POST['password']
= PASS
而不是pass
,则会返回0行。
这个脚本应该回显1或0.它可以正常工作,但我想让它更安全。
$_POST['username'] = 'admin';
$_POST['password'] = 'pass';
mysql_connect('localhost', '', '');
mysql_select_db('database');
echo $num = mysql_num_rows(mysql_query("SELECT username,password FROM users WHERE username = '". mysql_real_escape_string($_POST['username']) . "' AND password = '". mysql_real_escape_string($_POST['password']) . "'"));
答案 0 :(得分:7)
如果你想让它更安全,你根本不应该在数据库中以纯文本形式存储密码。存储密码的哈希值(例如MD5或SHA1),最好添加一个盐,然后每次将其与输入密码的哈希值进行比较是一种更好的方法。
对于您的查询,听起来您想让它区分大小写。为此,您需要将密码列上的排序规则更改为区分大小写的排序规则。这些是以_cs结尾的排序规则,例如latin1_general_cs。
答案 1 :(得分:1)
MySQL会进行大小写异常比较,这就是PASS == pass
的原因。您可以通过将列类型设置为BINARY
来规避这一点。除此之外,永远不要将密码明文存储在数据库中,而是使用sha或md5。