在php中不区分大小写的搜索

时间:2009-10-08 09:06:01

标签: php mysqli

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

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

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

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

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

我尝试搜索“测试”字样。 (在我的数据库中,我有一行“测试”一词。)但一无所获。如果我搜索“TEST”然后什么都没有。只有这样才能得到结果,如果我在数据库中搜索完全单词。 (试验)。

我在某处读到,“LIKE”是不敏感的。

你能帮助我修改代码,搜索案例不敏感吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

Doc on case sensitivity

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

答案 1 :(得分:1)

区分大小写取决于表的整理:

SHOW CREATE TABLE test

这是一个开始 - 检查你的表是否区分大小写。我会把它留给其他人来了解你的示例代码有多不安全。

答案 2 :(得分:1)

这可以帮到你。

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

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