【问题标题】:case insensitive search in phpphp中不区分大小写的搜索
【发布时间】:2009-10-08 09:06:00
【问题描述】:

我在我的网站中使用了一个小搜索脚本。

发布搜索表单后,我得到了这个变量:

$var = $_GET[$q] ;
$trimmed = trim($var); 

然后我尝试在数据库中搜索:

$query = "select * from test where acc like \"%$trimmed%\""; 
$numresults=mysql_query($query);
$numrows=mysql_num_rows($numresults);
.......

我尝试搜索“测试”这个词。 (在我的数据库中,我有一行带有“Test”字样。)但什么也没找到。如果我搜索“TEST”然后什么都没有。只有这样,如果我在数据库中准确搜索单词,我就会得到结果。 (测试)。

我在某处读到,“LIKE”不区分大小写。

你能帮我修改一下代码,搜索不区分大小写吗?

谢谢。

【问题讨论】:

标签: php mysqli


【解决方案1】:

Doc on case sensitivity:

默认字符集和排序规则是 latin1 和 latin1_swedish_ci,因此默认情况下非二进制字符串比较不区分大小写。这意味着如果您使用 col_name LIKE 'a%' 进行搜索,您将获得所有以 A 或 a 开头的列值。要使此搜索区分大小写,请确保其中一个操作数具有区分大小写或二进制排序规则。例如,如果您要比较的列和字符串都具有 latin1 字符集,则可以使用 COLLATE 运算符使任一操作数具有 latin1_general_cs 或 latin1_bin 排序规则

【讨论】:

    【解决方案2】:

    区分大小写取决于表格的排序规则:

    SHOW CREATE TABLE test

    这是一个开始 - 检查您的表格是否区分大小写。我将留给其他人来讨论您的示例代码有多不安全。

    【讨论】:

      【解决方案3】:

      这可以帮助你。

      http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

      顺便说一句,你应该使用 mysqli 对象在 PHP 中执行 SQL 请求。

      【讨论】:

        猜你喜欢
        • 2011-03-31
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 2017-06-30
        • 1970-01-01
        • 2013-09-26
        相关资源
        最近更新 更多