转义字符串意味着减少该字符串中使用的引号(和其他字符)的歧义。例如,定义字符串时,通常将其用双引号或单引号引起来:
"Hello World."
但是,如果我的字符串中包含双引号怎么办?
"Hello "World.""
现在我有歧义-解释器不知道我的字符串在哪里结束。如果要保留双引号,则有两种选择。我可以在字符串周围使用单引号:
'Hello "World."'
或者我也可以避免引用:
"Hello \"World.\""
任何带斜杠的引号是 转义,并应理解为字符串值的一部分。
当涉及查询时,MySQL会监视某些关键字,这些关键字我们不能在查询中使用而不会引起混淆。假设我们有一个值表,其中一列被命名为“选择”,我们想选择该值:
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中的上下文。