Php MySQL搜索-从列中转义特殊字符
嗨,我想通过使用Like查询转义特殊字符来搜索字符串 我的字符串是-abc&abc 列值为-abc&abc 不知何故,我不想在这个搜索功能中包含特殊字符 我可以使用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
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')