如何让mysqli_query正确地比较一个变量?

时间:2011-04-13 18:57:43

标签: php mysql

这是我的代码;

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仍然将其比较为正确。当我使用相同的===语句时,它会破坏代码并且它不起作用吗?

我希望它区分大小写。

有什么想法吗?

感谢。

2 个答案:

答案 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”和“é”在给定的排序规则中具有相同的排序值,则它们相等。