如何在Mysql中正则表达式中转义特殊的SQL字符

时间:2011-08-10 11:54:17

标签: mysql regex

我有一个文本字段来接受来自UI的正则表达式。对于这些正则表达式,我有搜索功能,并希望进行搜索。我正在使用预准备语句,DB是mysql。当我在'%'上搜索时,我只想要以'%'开头的搜索正则表达式。但是,因为'%'是mysql中的通配符,所以我在搜索中获得所有正则表达式。如何逃避它。

2 个答案:

答案 0 :(得分:10)

只需在角色前使用反斜杠,如MySQL documentation section 9.1

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

注意(来自MySQL文档):

  

如果在模式匹配上下文之外使用“\%”或“\ _”,它们会计算字符串“\%”和“\ _”,而不是“%”和“_”。

答案 1 :(得分:1)

如果您使用的是PHP,则可以使用以下代码转义%,_和字符:

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

\(反斜杠)和引用你当然也必须逃避(一如既往!防止SQL注入),例如mysql_real_escape_string()