关于mysql_real_escape_string的问题

und*_*one 5 php mysql escaping wildcard

我正在使用php开发我的个人网站.一切都还可以,但我只是mysql_real_escape_stringphp.net上阅读手册,发现了两件事:

  1. 在向MySQL发送查询之前,必须始终使用此函数(少数例外)使数据安全.
  2. mysql_real_escape_string()不会转义%和_.如果与LIKE,GRANT或REVOKE结合使用,这些是MySQL中的通配符.

我有两个问题:
1 - 这些例外是什么?
2-如何逃避这些角色?

You*_*nse 5

在向MySQL发送查询之前,必须始终使用此函数(少数例外)使数据安全.

令我非常失望的是,手册页上写着完整的垃圾,他们拒绝让它变得正确.
因此,相反,只有少数情况需要此功能.所以说只有一个:当你在SQL查询中添加一个字符串时.

mysql_real_escape_string()不会转义%和_.如果与LIKE,GRANT或REVOKE结合使用,这些是MySQL中的通配符.

没关系太多.只要您故意使用LIKE运算符,这些字符就不会造成任何伤害.

但是如果要转义转到LIKE语句的字符串,可以使用此代码

$like = addCslashes($like,'\%_');
Run Code Online (Sandbox Code Playgroud)

(注意斜杠 - 它也需要作为手动说明进行转义.还要注意C函数名中的字母).
在此过程之后,您可以使用生成的$like变量以任何方式构建查询 - 引用和转义它们或在预准备语句中使用.