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