Con este problema, realmente me gustaría evitar modificar los archivos principales si es posible, por lo que una solución alternativa sería extremadamente útil.
REGEX funciona con la clase de generador de consultas 'where' bastante fácil, pero el uso de los límites de palabras lo rompe al agregar un espacio adicional.
function search($searchQuery){ $sq = '[[:<:]]'.strtolower($searchQuery).'[[:>:]]'; $this->db->select('column'); $this->db->from('table'); $this->db->where('LOWER(otherColumn) REGEXP', $sq); echo $this->db->get_compiled_select(); } search('billy');Resultado Esperado:
SELECCIONE
columnDEtableDONDE INFERIOR (otraColumna) REGEXP '[[:<:]]billy[[:>:]]';
Resultado actual:
SELECCIONE
columnDEtableDONDE INFERIOR (otraColumna) REGEXP [[: <:]]billy[[:>:]]';
Este es un problema tan específico con una pila específica y no he encontrado a nadie que se encuentre con el mismo problema. He intentado escapar de los dos puntos, los <, los corchetes, nada parece funcionar. O agrega barras invertidas adicionales.
Realmente cualquier ayuda o dirección sería útil en este punto.
Gracias por adelantado.
function search($searchQuery){ $sq = $this->db->escape('[[:<:]]'.strtolower($searchQuery).'[[:>:]]'); $this->db->select('column'); $this->db->from('table'); $this->db->where('LOWER(otherColumn) REGEXP ', $sq, false); echo $this->db->get_compiled_select(); } search('billy');Para Codeigniter v 3.1.6 y MySQL v5.6
Solo porque Codeigniter agrega espacio antes y después de < al compilar la consulta, no sé por qué, pero lo hace. Y he escapado el valor de la variable $sq para mitigar el ataque de inyección o idéntico. Por lo tanto, se agregó un tercer parámetro a la función where como false para evitar que vuelva a escapar y agregue espacios.
No he pasado por otras versiones de codeigniter. Espero que esto funcione.
Para obtener más información sobre MySQL REGEXP , visite este enlace: Manual de referencia de MySQL 5.6 - Expresiones regulares