2013-03-27 51 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?