2011-04-13 75 views
0

这是我的代码;如何让mysqli_query比较变量?

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

你的意思是大小写敏感吗? – 2011-04-13 18:59:58

+0

是的。我会编辑我的答案,使其更清楚, – Basic 2011-04-13 19:01:49

回答

2

参见:http://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html

SELECT * FROM accounts WHERE BINARY username = '$qrystring'"; 

而且还做什么哈夫丹说! ;)

+0

谢谢你,我会标记为正确的,当我可以:) – Basic 2011-04-13 19:05:32

+0

虽然这工程作为你希望它是COLLATE你应该用来做一个区分大小写的匹配。 – halfdan 2011-04-13 19:08:49

1

请在将未经过滤的数据传递给数据库之前,对您的$qrystring变量进行清理。 (请参阅SQL注入)。

为了让你将有一个区分大小写的匹配你的列中使用COLLATE

username = COLLATE latin1_general_cs = '$querystring' 

从手册:

简单的比较操作(> =,> =,<, < =,排序和分组)基于每个字符的“排序值”。具有相同排序值的字符被视为相同的字符。例如,如果“e”和“é”在给定的归类中具有相同的排序值,则它们相等。

+0

叶我要去我只是测试如何我可以使其区分大小写 – Basic 2011-04-13 19:02:33