转义字符串意味着减少在该字符串中使用的引号(和其他字符)中的歧义。例如,当您定义字符串时,通常用双引号或单引号将其括起来:
"Hello World."
但是如果我的字符串中有双引号呢?
"Hello "World.""
现在我有歧义 – 解释器不知道我的字符串在哪里结束。如果我想保持我的双引号,我有几个选项。我可以使用单引号围绕我的字符串:
'Hello "World."'
或者我可以逃避我的报价:
"Hello \"World.\""
前面带有斜杠的任何引号都将被转义,并被理解为字符串值的一部分。
当涉及到查询时,MySQL有一些关键字,它监视我们不能在我们的查询中使用,而不会导致一些混乱。假设我们有一个值列表,其中一个列被命名为“Select”,我们想选择:
SELECT select FROM myTable
我们现在在我们的查询中引入了一些歧义。在我们的查询中,我们可以通过使用back-ticks来减少歧义:
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的上下文中。