为了净化用户输入,我们通常使用mysql_real_eescape_string,但例如,如果我想转义:O'Brian,它会返回O'''Brian,我真的不喜欢这样,因为如果我想打印这个名称,我必须在几分钟内去掉slashesesevertime。所以我想使用这个功能:
$search = array("'", '"');
$replace = array("´", "“");
$str_clean = str_replace($search, $replace, "O'Brian");
这个简单的函数可以保护我免受MySQL注入的影响吗?非常感谢并为我糟糕的英语感到抱歉。
没有-不再逃避!
使用mysqli
或PDO
和准备的语句
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()
中。