转义字符串意味着减少该字符串中使用的引号(和其他字符)的歧义。例如,在定义字符串时,通常将其括在双引号或单引号中:
"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));
存在其他用于转义字符串的方法,例如,,,等,尽管您会发现,当目标是运行安全查询时,开发人员通常更喜欢or(在PostgreSQL的上下文中。add_slashes
addcslashes
quotemeta
mysql_real_escape_string
pg_escape_string