Combine SELECT y LOCATE para buscar cadenas dentro de otras cadenas
Estoy creando un filtro de malas palabras muy simple en una aplicación de chat. Sé que son muy difíciles de implementar correctamente, pero sólo quiero algo rápido y simple que sea mejor que nada.
Tengo una tabla de malas palabras estructurada de la siguiente manera:
|----|-----------|
| ID | Word |
|----|-----------|
| 01 | Banana |
| 02 | Melon |
| 03 | Eggplant |
| 04 | Pineapple |
|----|-----------|
Mi consulta básica para saber si una palabra que un usuario ha escrito aparece en la tabla de blasfemias es bastante simple:
SELECT ID FROM profanities WHERE Word = '$word';
Puedo modificar esto para usar LIKE
o % etc., pero es bastante sencillo.
Lo que también quiero es combinar esto con una consulta que también verifique si una palabra en la tabla está DENTRO de la palabra que escribió el usuario. Por ejemplo, la consulta anterior falla en palabras como "AllBananas" o incluso BananaMelon. He probado algunas combinaciones LOCATE()
pero no funcionan.
¿Hay alguna manera de combinar una consulta que verifique si una palabra pasada (o similar) está EN la tabla, así como si alguna palabra en la tabla aparece DENTRO de la palabra pasada?
Cuando cambies de posición funcionará
También necesitaría una intercalación que no distinga entre mayúsculas y minúsculas.
Su código sugiere que no utilice declaraciones preparadas, lo que puede provocar una inyección de SQL y causar problemas, por lo que sería mejor cambiar a declaraciones preparadas todo el tiempo.
CREATE TABLE profanities (
`ID` INTEGER,
`Word` varchar(50)
);
INSERT INTO profanities
(`ID`, `Word`)
VALUES
('01', 'Banana'),
('02', 'Melon'),
('03', 'Eggplant'),
('04', 'Pineapple');
Records: 4 Duplicates: 0 Warnings: 0
SELECT ID FROM profanities WHERE 'AllBananas' LIKE CONCAT('%',Word,'%') ;
IDENTIFICACIÓN |
---|
1 |
SELECT ID FROM profanities WHERE 'Allbananas' LIKE CONCAT('%',Word,'%') ;
IDENTIFICACIÓN |
---|
1 |
SELECT ID FROM profanities WHERE 'BananaMelon' LIKE CONCAT('%',Word,'%') ;
IDENTIFICACIÓN |
---|
1 |
2 |
violín