2 回答
TA贡献1856条经验 获得超17个赞
转义字符串意味着减少该字符串中使用的引号(和其他字符)的歧义。例如,当您定义字符串时,通常用双引号或单引号括起来:
"Hello World."
但是,如果我的字符串中有双引号怎么办?
"Hello "World.""
现在我有歧义 - 翻译不知道我的字符串在哪里结束。如果我想保留双引号,我有几个选择。我可以在我的字符串周围使用单引号:
'Hello "World."'
或者我可以逃避我的报价:
"Hello \"World.\""
任何以斜杠开头的引用都将被转义,并被理解为字符串值的一部分。
在查询时,MySQL有一些它所监视的关键字,我们不能在查询中使用它们而不会造成一些混淆。假设我们有一个值表,其中一列被命名为“Select”,我们想要选择:
SELECT select FROM myTable
我们现在已经在查询中引入了一些含糊之处。在我们的查询中,我们可以通过使用反向标记来减少这种模糊性:
SELECT `select` FROM myTable
这消除了我们通过在选择字段名称时使用不良判断而引入的混淆。
只需传递您的值,就可以为您处理很多这样的事情mysql_real_escape_string()。在下面的示例中,您可以看到我们通过此函数传递用户提交的数据,以确保它不会导致我们的查询出现任何问题:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
其他方法转义字符串,如存在add_slashes,addcslashes,quotemeta,和更多的,但你会发现,当我们的目标是运行安全的查询,由大开发商喜欢mysql_real_escape_string或pg_escape_string(在PostgreSQL中的上下文。
TA贡献1995条经验 获得超2个赞
某些字符对您正在使用的SQL数据库具有特殊含义。在查询中使用这些字符时,它们可能会导致意外和/或意外行为,包括允许攻击者危害您的数据库。为了防止这些字符以这种方式影响查询,需要对其进行转义,或者以不同的方式说明,需要告知数据库不要将它们视为此查询中的特殊字符。
在的情况下mysql_real_escape_string()
,它避开\x00
,\n
,\r
,\
,'
,"
和\x1a
作为这些中,当没有逃脱,可引起前面提到的问题,其包括与一个MySQL数据库的SQL注入。
添加回答
举报