php 反斜杠转成正斜杠,php反斜杠转义

_而%不是通配符在MySQL一般,而且不应该被转义,将它们放入普通的字符串字面量的目的。mysql_real_escape_string是正确的,足以满足此目的。addcslashes不应该使用。

_并且%仅在LIKE-matching 上下文中是特殊的。当您想为LIKE语句中的文字使用准备字符串时,要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 ...构造指定自己的逸出字符。为了理智,我们将选择除该死的反斜杠以外的其他东西!

function like($s, $e) { return str_replace(array($e, '', '%'), array($e.$e, $e.'', $e.'%'), $s); }

$escapedname= mysql_real_escape_string(like($name, '=')); $query= "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ..."; 或带有参数(例如在PDO中):

$q= $db->prepare("... WHERE name LIKE ? ESCAPE '=' AND ..."); $q->bindValue(1, '%'.like($name, '=').'%', PDO::PARAM_STR); (如果您希望有更多的可移植性聚会时间,那么尝试考虑MS SQL Server和Sybase也可能会很有趣,因为其中的[字符在LIKE语句中也是不正确的,并且必须转义。argh。)来源:stack overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值