/ / MySQL search - unikaj znaków specjalnych z kolumny - php, mysql, regex, string

Wyszukiwanie MySQL - uniknij znaków specjalnych z kolumny - php, mysql, regex, string

Cześć Chcę wyszukać ciąg znaków, uciekając znaki specjalne za pomocą zapytania Like.

Mój ciąg to - abc i abc

Wartość kolumny to - abc i abc

Jakoś nie chcę uwzględniać znaków specjalnych w tej funkcji wyszukiwania.

Mogę uciec od mojego ciągu za pomocą REGEX używając preg_replace with /[^A-Za-z0-9-]/

To, czego chcę, to funkcja mysql, która może zastąpić wartość kolumny tylko w celu uzyskania wyniku wyszukiwania, ale nie powinna aktualizować wartości kolumny.

Więc przekażę ciąg abc abc i dopasuje kolumnę do wartości abc abc.

Wirtualnie - SELECT * FROM MyTable WHERE myColumn LIKE "abc abc";

i powinno dać mi wynik.

Odpowiedzi:

0 dla odpowiedzi № 1
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 ;

poniższe zapytanie działa

SELECT RemoveSpecialChar(loginPass) FROM users

Musisz dodać wartość ascii wszystkich wymaganych znaków poniżej, jeśli funkcja

 IF ASCII(c) NOT IN(35, 38,37, 42, 64, 94) THEN

Więc twoje zapytanie będzie

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