MySQL Real转义字符串

时间:2011-07-10 12:47:14

标签: php mysql

我有一个插入函数,我使用MySQL real_escape_string()删除非法字符只是它实际上没有删除那些字符,任何人都可以看到我出错的地方?

    $interest = mysql_real_escape_string(urldecode($_GET['interest']));

    $query   = "INSERT INTO user_interests (user_id, interest) VALUES('{$user_id}' , '{$interest}')";
    mysql_query($query) or die(mysql_error());
    echo $interest;

2 个答案:

答案 0 :(得分:2)

没有“非法人物”。 mysql_real_escape_string只对所有字符进行编码,以便将它们安全地放入查询中。如果您要删除字符c,请使用str_replace

$input = urldecode($_GET['interest']);
$input = str_replace('c', '', $input);
$interest = mysql_real_escape_string($input);

答案 1 :(得分:2)

mysql_real_escape_string只是转义字符串中的字符,当您尝试将它们写入数据库时​​,这些字符可能会导致问题。这并不意味着它会删除它们。

想象一下,您正在接受用户输入,并且用户将引号放入输入字段。当您尝试将该字符串插入数据库时​​,引用将被解释为sql查询中的引用,并且查询将无法正常工作。

INSERT INTO table (string)
VALUES ("this is a string with an extra " in it")

如果你首先在这个字符串上使用mysql_real_escape_string,那么你的sql查询基本上会是这样的:

INSERT INTO table (string)
VALUES ("this is a string with an extra \" in it")

请参阅上面的转义反斜杠。您可以看到这个额外的引用甚至会在SO上混淆格式。