避免MySQL注入替换单引号和双引号


Avoid MySQL Injection replacing single and double quotes

为了净化用户输入,我们通常使用mysql_real_eescape_string,但例如,如果我想转义:O'Brian,它会返回O'''Brian,我真的不喜欢这样,因为如果我想打印这个名称,我必须在几分钟内去掉slashesesevertime。所以我想使用这个功能:

$search = array("'", '"');
$replace = array("´", "“");
$str_clean = str_replace($search, $replace, "O'Brian");

这个简单的函数可以保护我免受MySQL注入的影响吗?非常感谢并为我糟糕的英语感到抱歉。

没有-不再逃避!

使用mysqliPDO和准备的语句

http://php.net/manual/en/mysqli.prepare.php

http://php.net/manual/en/pdo.prepared-statements.php

mysql_real_eescape_string只添加了用于字符串转义的',而不将它们添加到数据库中,因此在显示内容时不必使用条带斜杠。

如果您真的要将'存储在数据库中,请对off执行magic_quote

您应该始终使用mysql_real_escape_string来转义输入。这适用于值写入数据库时,而不是从数据库中读取的值时。当你把"O’Brian"写进数据库时,它会被存储为"O’布赖恩",当你把它读出来时,你也应该得到"O’布莱恩"(不需要去掉斜杠,因为它们不存在)。

是的,显然它可以防止SQL Injection攻击

考虑到连接的当前字符集,它对unescaped_string中的特殊字符进行转义,以便将其安全地放置在mysql_query()中。