为什么我的mysql_real_escape_string不起作用?

时间:2010-08-12 11:58:16

标签: php mysql

我读过很多关于SQL注入的内容。但它不适用于此代码:

$inputform= $_GET["password"];
$query = "INSERT INTO user(password) VALUES ('".mysql_real_escape_string($inputform)."')";  

例如,我使用此示例:O'Conner。当我提交并查看我的表格时,O'Connor而不是O\'Conner

感谢

5 个答案:

答案 0 :(得分:7)

引用被转义,因此MySQL不会将其解释为字符串分隔符。反斜杠不会存储在数据库中,也不应该存储。您所看到的是正确的,预期的和记录在案的行为。

最佳解决方案BTW是使用PDO和参数化查询。

答案 1 :(得分:1)

mysql_real_escape_string()转义该值,以便MySQL的SQL解析器在存储值时可以正确解释该值,它实际上并不作为转义字符串存储在数据库中

答案 2 :(得分:1)

如果您在表格中获得O'Connor,则表明它正常运行。但请尝试echo $query,您将看到转义的结果。

答案 3 :(得分:1)

它工作得很好!您的数据库中不应该有“O \'Conner”,只是在查询中。如果它不起作用,您的查询将不会成功,因为'in O'Conner会破坏您的查询。

答案 4 :(得分:1)

当你查看表格时,它应该是O'Connor - 这意味着字符串在SQL中正确转义。如果它没有被mysql_real_escape_string转义,您可能最终会出现语法错误。

查询最终会显示为:

INSERT INTO user(password) VALUES ('O'Connor)

如果您想在数据库中使用反斜杠,请在将其传递给mysql_real_escape_string之前尝试使用addslashes,但您可能不会。{/ p>