这是我的代码;
if ($_SERVER['QUERY_STRING']) {
$qrystring = $_SERVER['QUERY_STRING'];
$q = "SELECT * FROM accounts WHERE username = '$qrystring'";
$r = mysqli_query($dbc, $q);
if ($r) {
if (mysqli_num_rows($r) > 0) {
echo 'Yay account active';
}
else {
header('location: create');
}
@mysqli_free_result($r);
}}
现在例如当$ qrystring = User,并且在数据库中它等于用户时,mysql仍然将其比较为正确。当我使用相同的===语句时,它会破坏代码并且它不起作用吗?
我希望它区分大小写。
有什么想法吗?
感谢。
答案 0 :(得分:2)
请参阅:http://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html
SELECT * FROM accounts WHERE BINARY username = '$qrystring'";
也做半文说的! ;)
答案 1 :(得分:1)
在将未经过滤的$qrystring
变量传递给数据库之前,请先清理它。 (参见SQL注入)。
要进行区分大小写匹配,您必须在列上使用COLLATE:
username = COLLATE latin1_general_cs = '$querystring'
从手册:
简单比较操作(> =,>,=,<,< =,排序和分组)基于每个字符的“排序值”。具有相同排序值的字符被视为相同的字符。例如,如果“e”和“é”在给定的排序规则中具有相同的排序值,则它们相等。