具有特殊字符的MySql搜索

时间:2012-11-29 10:30:52

标签: php mysql

我使用MySql作为 -

从数据库中搜索记录
SELECT * FROM tab WHERE col LIKE '%myvalue%';

此工作正常并显示所有记录myvalue

现在问题是我有一些记录,例如my'valuemyva'luemyval-uemy-value,并且还希望在搜索中包含这些记录。此外,当我搜索my'value时,它应显示myvaluemy-value

如何实现这一目标?任何帮助。是否可以使用LIKE运算符?

4 个答案:

答案 0 :(得分:2)

当您使用PHP时,如果有人使用您的搜索,您应该执行以下操作:

  1. 通过$ _POST
  2. 获取搜索字词
  3. 从搜索字词中删除所有特殊字符(my'value变为myvalue
  4. 将搜索字词替换为MySQL通配符(myvalue变为%m%y%v%a%l%u%e%
  5. 执行SELECT * FROM tab WHERE col LIKE '%m%y%v%a%l%u%e%'
  6. 任何其他解决方案都不符合您的所有要求。

    SQL小提琴:http://sqlfiddle.com/#!2/20f811/2

答案 1 :(得分:1)

使用

SELECT * FROM tab WHERE col LIKE '%myvalue%' OR col LIKE '%my_value%'

下划线_是一个单字符通配符。

答案 2 :(得分:0)

这个怎么样?

SELECT * FROM tab WHERE col LIKE 'my%' OR col LIKE '%value'

这将检查col应该以my开头并以值结束。

Demo


编辑1

由于可能有任何特殊字符和正则表达式不能与MySQL一起使用,我建议您通过将特殊字符替换为null然后将字符串与myvalue匹配来执行您想要在PHP中实现的目标。

希望这会对你有所帮助。


编辑2

我完全不知道php,但可以告诉你该怎么做。

mysql = "SELECT id, col FROM tab WHERE col LIKE '%my%' OR col LIKE '%value%'";
rs = mysql.execute();
String newString = "";
while (rs.next()) {
    newString = rs.getString(2);
    newString = new string after replacing special characters using regexp
    if (newString.equals("myvalue")) {
        // your code here..... this is place what you wanted.
    }
} 

答案 3 :(得分:0)

得到了这个......

PHP部分

$term = str_replace('-','',str_replace(',', '', str_replace('\'', '', $term)));

MySql Part

SELECT *
FROM tab
WHERE ((REPLACE(REPLACE(REPLACE(col, '\'', ''), ',', ''), '-', '') LIKE "%$term%") 
OR (col LIKE "%$term%"));

请参阅 demo