首先,这段代码是错误的。
它有错误的意思和错误的名称。
没有SQL数据准备代码进行任何清理或消毒。 它只是逃避。而这种逃避必须是无条件的。 和逃逸不应该混入其他任何东西。
所以,它必须是三个分开的功能,而不是一个。
- 摆脱魔术引号。必须在数据输入处单独完成。
- 如果你愿意修剪。这只是文本美化,没有关键功能。
- mysql_real_escape_string()为SQL查询准备数据。
所以,这里唯一与mysql有关的函数是mysql_real_escape_string()。尽管它没有提供任何数据“干净”,但仅仅是避开了分隔符。因此,必须使用此功能只有与数据被视为一个字符串,并用引号括起来。所以,这是一个很好的例子:
$num=6;
$string='name';
$num=mysql_real_escape_string($num);
$string=mysql_real_escape_string($string);
$query="SELECT * FROM table WHERE name='$name' AND num='$num'";
而这个例子是错误的:
$num=6;
$string='name';
$num=mysql_real_escape_string($num);
$string=mysql_real_escape_string($string);
$query2="SELECT * FROM table WHERE name='$name' AND num=$num";
即使$ QUERY2不会抛出一个语法错误,这是错误的数据准备和mysql_real_escape_string将帮助这里没有什么。所以,这个函数只能用于转义被视为字符串的数据。尽管可以对任何数据类型进行操作,但也有一些例外,例如LIMIT参数,不能将其视为字符串。
@Moonshield,MAGIC QUOTES功能已被弃用,所以我们不应该依赖它。另外,如你所说,MySQL功能更好。 MySQL转义函数转义所有MySQL特定的特殊字符。 MAGIC QUOTES只会引用引号,反斜杠和空字符。 – 2010-03-31 13:27:52
有一些奇怪的情况,在SO上广泛宣传,当addslashes会失败并出现一些罕见的数据集时。 – 2010-03-31 13:57:16