2011-08-10 20 views
6

Mam pole tekstowe do akceptowania wyrażeń regularnych z interfejsu użytkownika. W przypadku tych wyrażeń regularnych mam funkcję wyszukiwania i chcę przeprowadzić wyszukiwanie. Używam przygotowanych instrukcji, a DB to mysql. Kiedy wykonuję wyszukiwanie na "%", chcę tylko wyszukować wyrażenie regularne zaczynające się od "%". Ale ponieważ '%' jest znakiem wieloznacznym w mysql, otrzymuję całe wyrażenie regularne w wyszukiwaniu. Jak uciec z tego.Jak uniknąć specjalnych znaków SQL w wyrażeniach regularnych w Mysql

+0

Chcę nawet uciec od innych symboli wieloznacznych mysql takich jak "_". – Daemonthread

+0

mówisz o wyrażeniach regularnych lub operatorze LIKE? Ponieważ% nie jest znakiem specjalnym w wyrażeniach regularnych. Zmień swoje pytanie, aby było bardziej zrozumiałe. I/lub zapisz warunki SQL, które chcesz użyć jako przykład. – TMS

+0

Przechowuję wyrażenia regularne w bazie danych. I używam operatora LIKE w SQL do wyszukiwania wyrażenia regularnego. Sample sql: "Wybierz wyrażenie z REGEX, gdzie wyrażenie LIKE"% ";". Chcę użyć% w sql jako normalny znak. – Daemonthread

Odpowiedz

8

Wystarczy użyć backslash przed postaci, jak pokazano na :

\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. 

nocie (od dokumentacji MySQL):

Jeśli używasz "\%" lub „\ _ "Poza kontekstami dopasowywania wzorca, oceniają one ciągi" \% "i" \ _ ", a nie"% "i" _ ".

1

Jeśli używasz PHP, można uciec%, _ i znaków przy użyciu tego kodu:

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

katalogu \ (backslash) i cytuje cię oczywiście również musi uciekać (jak zawsze Aby zapobiec! SQL injection), np przez mysql_real_escape_string().

Powiązane problemy