2011-04-13 69 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