繁体   English   中英

使用MySQL / PHP搜索,但不区分大小写

[英]Search w/ MySQL/PHP but not Case-Sensitive

我在学校里学会了用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 = search”

如果我现在使用此搜索,则区分大小写。 示例:我搜索“ * k * elvin”,但未显示任何内容。 但是,如果搜索“ * K * elvin”,我会得到结果。

如何使它不区分大小写?

检查表的排序规则。 默认情况下(取决于您的配置),MySQL将使用utf8_general_ci ,其中ci不区分大小写。 另一方面,如果您使用utf8_bin ,则将获得区分大小写的排序规则,并且所有搜索都将区分大小写。

其他常见的排序规则latin1_general_ci (和*_cslatin1_bin )。

您确实应该优化查询并仅搜索相关选项。

虽然可以通过将两个参数都转换为小写来搜索不区分大小写的字符(例如)。 这样,您的代码将变为: if (strtolower($name) == strtolower($search)) {if (strtolower($surname) == strtolower($search)) {

但是,我将您的查询限制为: SELECT * from tuser WHERE name LIKE $search OR surname LIKE $search ,这将产生与您的搜索参数匹配的所有结果。

别忘了逃脱$ search

如前所述,大多数常见的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注入的答案, 如何防止PHP中的SQL注入?

您可以使用strcasecmp()函数比较两个字符串并忽略大小写。

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

至:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM