2013-03-27 53 views
0

我在學校學習使用MySQL和PHP編程搜索。搜索w/MySQL/PHP,但不區分大小寫

我有我的search.php這個代碼:

<?php 
mysql_connect("localhost", "root", ""); 
mysql_select_db("db1"); 

$sql = "SELECT * from tuser"; 
$Namen = mysql_query ($sql); 
$user_id = $_GET['user_id']; 
$search = $_GET['search']; 

while ($ergebnis_datensatz = mysql_fetch_array($Names)){ 
    $user_id = $ergebnis_datensatz['user_id']; 
    $name = $ergebnis_datensatz['name']; 
    $surname = $ergebnis_datensatz['surname']; 

    if ($name == "$search") { 
     echo "$name $surname"; 
    } 

    else { 
     echo ""; 
    } 


    if ($surname == "$search") { 
     echo "$name $surname"; 
    } 

    else { 
     echo ""; 
    } 

} 


?> 

而且在我的搜索輸入的網站我與「NAME =搜索」

如果我現在使用這個搜索一個簡單的輸入,它是區分大小寫的。例如:我搜索「* k * elvin」並且什麼也沒有出現。但如果搜索「* K *埃爾文」我得到了我的結果。

我該如何讓它不區分大小寫?

回答

2

檢查表格的排序規則。默認情況下(取決於您的配置),MySQL將使用utf8_general_ci,其中ci不區分大小寫。另一方面,如果您使用utf8_bin,則會得到區分大小寫的排序規則,並且您的所有搜索都將區分大小寫。

其他常見的歸類是latin1_general_ci(和*_cs,和latin1_bin)。

1

您確實應該優化您的查詢並僅搜索相關選項。

儘管可以通過將兩個參數都轉換爲小寫來搜索不區分大小寫(例如)。這樣一來,你的代碼將成爲:if (strtolower($name) == strtolower($search)) {if (strtolower($surname) == strtolower($search)) {

不過,我想,而不是限制你的查詢是這樣的: SELECT * from tuser WHERE name LIKE $search OR surname LIKE $search,這將產生符合搜索參數的所有結果。

不要忘了逃跑$搜索

0

可以使用strcasecmp()功能比較兩個字符串,忽略大小寫。

if ($name == "$search") { 

到:

if (strcasecmp($name, $search)) { 
+0

如果你想看看「$名稱== $搜索」與「strcasecmp」,代碼看起來更像是「如果(strcasecmp($名稱,$搜索)== 0)「,如果binairy字符串是否爲等於> 0或<0,則返回0。 – 2014-09-23 08:02:37

1

如前所述,最常用的MySQL的排序規則是不區分大小寫。但是,如果您不希望修改歸類,則可以使用BINARY運算符解決此問題。

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

SELECT * 
FROM tuser 
WHERE BINARY $search IN (name,surname) 

所以給

$sql = 'SELECT * FROM tuser WHERE BINARY "'.$search.'" IN (name,surname)'; 

重要注意這一點。目前這可能會讓你的SQL開放注入。這將比選擇一切,然後在PHP中循環它更有效率,但你首先需要一些代碼改進。

這裏有這裏關於SQL注入的答案How can I prevent SQL injection in PHP?