2011-08-10 16 views
6

Tengo un campo de texto para aceptar expresiones regulares de la interfaz de usuario. Para estas expresiones regulares, tengo una función de búsqueda y quiero hacer una búsqueda. Estoy usando declaraciones preparadas y la base de datos es mysql. Cuando realizo una búsqueda en '%', solo quiero buscar expresiones regulares comenzando con '%'. Pero, como '%' es comodín en mysql, obtengo todas las expresiones regulares en la búsqueda. Cómo escapar de esoCómo escapar de los caracteres especiales de SQL en la expresión regular en Mysql

+0

Quiero incluso escapar de los otros comodines mysql como '_'. – Daemonthread

+0

¿estás hablando de expresiones regulares o del operador LIKE? Porque% no es un personaje especial en expresiones regulares. Por favor edite su pregunta para ser más claro. Y/o, escriba la condición SQL que desea usar como ejemplo. – TMS

+0

Estoy almacenando las expresiones regulares en la base de datos. Y estoy usando el operador LIKE en SQL para buscar la expresión regular. Ejemplo sql: "Seleccionar expresión de REGEX donde la expresión LIKE '%';". Quiero usar% en el sql como caracter normal. – Daemonthread

Respuesta

8

sólo tiene que utilizar una barra invertida delante del carácter, como se muestra en la :

\0 An ASCII NUL (0x00) character. 
\' A single quote ("'") character. 
\" A double quote (""") character. 
\b A backspace character. 
\n A newline (linefeed) character. 
\r A carriage return character. 
\t A tab character. 
\Z ASCII 26 (Control+Z). See note following the table. 
\\ A backslash ("\") character. 
\% A "%" character. See note following the table. 
\_ A "_" character. See note following the table. 

Nota (a partir de la documentación de MySQL):

Si utiliza "\%" o "\ _ "fuera de los contextos de coincidencia de patrones, evalúan las cadenas" \% "y" \ _ ", no a"% "y" _ ".

1

Si está usando PHP, usted puede escapar%, _ y personajes utilizando este código:

$escaped = addcslashes($str, "%_"); 

El \ (barra invertida) y comillas por supuesto también debe escapar (como siempre Para evitar! Inyección SQL), por ejemplo por mysql_real_escape_string().

Cuestiones relacionadas