Php MySQL搜索-从列中转义特殊字符

Php MySQL搜索-从列中转义特殊字符,php,mysql,regex,string,Php,Mysql,Regex,String,嗨,我想通过使用Like查询转义特殊字符来搜索字符串 我的字符串是-abc&abc 列值为-abc&abc 不知何故,我不想在这个搜索功能中包含特殊字符 我可以使用REGEX通过使用preg\u替换为/[^A-Za-z0-9\-]/ 我想要的是一些mysql函数,它可以替换列值以仅获取搜索结果,但不应该更新列值 所以我将传递abc字符串,它将把列与值abc匹配 实际上-从MyTable中选择*,其中myColumn类似于“abc” 它应该给我结果 DROP FUNCTION IF EXISTS

嗨,我想通过使用Like查询转义特殊字符来搜索字符串

我的字符串是-abc&abc

列值为-abc&abc

不知何故,我不想在这个搜索功能中包含特殊字符

我可以使用
REGEX
通过使用
preg\u替换为/[^A-Za-z0-9\-]/

我想要的是一些mysql函数,它可以替换列值以仅获取搜索结果,但不应该更新列值

所以我将传递abc字符串,它将把列与值abc匹配

实际上-
从MyTable中选择*,其中myColumn类似于“abc”

它应该给我结果

DROP FUNCTION IF EXISTS RemoveSpecialChar; 

DELIMITER $ 

CREATE FUNCTION RemoveSpecialChar(in_str VARCHAR(4096)) RETURNS VARCHAR(4096) CHARSET utf8 
BEGIN 


 DECLARE out_str VARCHAR(4096) DEFAULT ''; 


DECLARE c VARCHAR(4096) DEFAULT ''; 


DECLARE pointer INT DEFAULT 1;
  IF ISNULL(in_str) THEN 
    RETURN NULL; 


ELSE 
    WHILE pointer <= LENGTH(in_str) DO



          SET c = MID(in_str, pointer, 1); 


          IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN 
                SET out_str = CONCAT(out_str, c); 
          END IF; 

          SET pointer = pointer + 1; 
        END WHILE;   END IF; 

  RETURN out_str; 

END$ 

DELIMITER ;
您需要在函数的下面if中添加所有必需字符的ascii值

 IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN 
因此,您的查询将是

SELECT * FROM MyTable WHERE myColumn LIKE RemoveSpecialChar('abc & abc')

基本上你想忽略where子句中的所有特殊字符?你需要复习你的问题。首先,您讨论“escape”,然后建议
preg\u replace
(escape!=replace)。再次讨论“搜索”和“不应该更新”。我将使用preg replace忽略使用php的字符串中的所有字符,然后它将通过使用类似clauseGo的方法进行匹配。您需要编写一个自定义函数,将所有特殊字符替换为blank/space。我成功地执行了上述操作。现在它给了我错误-函数testdb.RemoveSpecialChar不存在我的答案,现在检查。我还更改了函数定义。
SELECT * FROM MyTable WHERE myColumn LIKE RemoveSpecialChar('abc & abc')