2012-10-08 42 views
-1

可能重複:
PHP PDO Username Availability CheckerPHP檢索列在小寫

我有一個PHP腳本來檢查用戶名的可用性(如果它已經採取或不)。但我想比較用戶輸入的用戶名和小寫的數據庫用戶名。我已經把輸入以小寫字母輸入,但是如何以小寫字母使檢索列成爲可能。這裏的PHP腳本

<?php 
    $usr = strtolower($_GET['username']); 
    $link = new PDO('mysql:host=***;dbname=***;charset=UTF-8','***','***'); 
    $usr_check = $link->prepare("SELECT * FROM Conference WHERE Username = :usr"); 
    $usr_check->bindParam(':usr', $usr); 
    $usr_check->execute(); 
    if($usr_check->rowCount()>0) 
     echo "false"; 
    else 
      echo "true"; 
?> 

如何設置的用戶名欄爲小寫,然後把它比作$usr?因爲你的評論稱下面,我建議你做以下感謝

+0

你只需要在這個MySQL查詢中的用戶名? –

+2

真奇怪的是[我以前見過這個確切的問題](http://stackoverflow.com/questions/12656617/php-pdo-username-availability-checker#comment17075255_12656617)。 – Daedalus

+0

@Charlie Yabben你可以簡單地「選擇1從會議WHERE用戶名=:usr」而不轉換你的專欄。 –

回答

1

請儘量

SELECT * FROM Conference WHERE LOWER(Username) = :usr 

http://www.sqlinfo.net/mysql/mysql_function_upper_lower.php

確定。

  1. 轉換你的結果變成小寫http://sqlfiddle.com/#!2/bd50e/1

  2. 你比較字符串轉換爲表爲小寫通過用strtolower

  3. 現在比較結果
+0

我可以做'SELECT LOWER(用戶名)FROM會議WHERE用戶名=:usr'? –

+0

@CharlieYabben是的,但選擇用戶名會議在哪裏下(用戶名)=:usr。這是無用的,它不區分大小寫。 –

+0

@Mahan問題是,如果'User'存在於數據庫中,我不希望有人用'user'作爲用戶名的帳戶。那麼我的代碼和urs都能達到這個目的嗎? –

0

你可以使用

SELECT * FROM Conference WHERE LOWER(Username) = :usr 

作爲查詢,但這會花費你的索引的好處。

但是,如果列使用「ci」排序規則,則比較應該不區分大小寫。

+0

順便看一下,在這種情況下,即使您將字符串轉換爲LOWER(用戶名)。如果用戶名相同,它仍然會接受。這是不區分大小寫的。 –

0

如果你想在MySQL中使用LOWER(str)函數將字符串轉換爲lower。