首页 > 编程知识 正文

mysql转义字符,数据库转义字符

时间:2023-05-04 15:38:22 阅读:62147 作者:2833

小典典

不是_,%的通配符在MySQL中很常见,不应该被转义。 目的是放入普通的字符串文字中。 mysql_real_escape_string是正确的,足以满足此目的。 addcslashes不应该使用。

_而且%只在LIKE-matching上

上下文中是特殊的。 如果对LIKE语句中的字符使用准备字符串,则必须担心两个转义,以确保100%与100%匹配,而不仅仅是以100开头的字符串。

首先我喜欢逃跑。 LIKE处理完全在SQL内部进行。 如果要将字符串转换为字符LIKE表达式,还必须使用参数化查询执行此过程。

在此方案中,_和%是特殊的,因此必须转义。 转义字符也必须转义。 根据ANSI SQL,除这些字符外,不能

转义:'这是错误的。 (虽然MySQL通常可以摆脱它。 )

完成此操作后,进入第二个转义级别。 这是常规旧字符串的转义。 这发生在SQL之外,并且会创建SQL,因此必须在LIKE转义过程之后完成。 对于MySQL,此mysql_real_escape_string与以前相同。 其他数据库具有不同的功能。 要避免这种情况,只使用参数化查询。

在此引起混乱的问题是,MySQL将反斜杠用作两个嵌套转义步骤的转义字符,因此要匹配字符串和百分号,请将反斜杠双重转义,将LIKE

“something\%”。 或者,如果在PHP '文本中也使用反斜杠进行转义,则为' LIKE 'something\\% '。 啊!

根据ANSI

SQL,这不正确。 在字符串文字中,反斜杠表示字符反斜杠,如何转义单引号' '; 缺省情况下,LIKE表达式中完全没有转义符。

因此,如果以可移植的方式转义LIKE,则必须复盖默认的“错误”行为并使用该LIKE . ESCAPE

.结构指定自己的转义字符。 为了理性,我们会选择该死的反斜杠以外的东西!

函数生命周期($ s,$e ) {

returnstr_replace(Array($e、' _ '、' % ' )、Array ) $e.$e、$e.'_ '、$e.'% '、$s );

}

$ escaped name=MySQL _ real _ escape _ string (like ($ name,'=' );

$ query=' . wherenamelike ' % $ escaped name % ' escape '=' and . ';

或带参数(例如,PDO ) :

$ q=$ d B- prepare (' . wherenamelike? ESCAPE '=' AND . ';

$q-bindvalue(1,' %'.like ) $name,'=' ).' % ',PDO:PARAM_STR );

(如果想增加可移植的聚会时间,请考虑使用MS SQL

服务器和Sybase可能也很有趣。 [如果发生错误,则该字符在LIKE语句中也很特殊,必须进行转义。 argh )

2020-05-17

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。