这是mysql_real_escape_string的正常行为吗?

时间:2012-04-11 04:35:04

标签: php mysql

我刚刚禁用了magic_quotes_gpc,我注意到我的数据库中的用户输入有撇号,好像没有任何内容被转义。

($_POST['message'])="it's a test";
$string = mysql_real_escape_string(htmlentities($_POST['message']));

然后我将其插入数据库,数据库显示: it's a test

应用it\'s a test后,它不应该是mysql_real_escape_string吗? 或者是将\'转换为'的数据库(此处为PHPMyAdmin)? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

转义SQL的目的是避免SQL注入。 INSERT INTO table VALUES ('it's a test') ..会导致您遇到麻烦,但当您将其转义为INSERT INTO table VALUES ('it\'s a test') ..时,它将会起作用,并将“'它是测试'”插入您的数据库。

答案 1 :(得分:1)

mysql_real_escape_string()只是转义字符以正确地将它们放到DB中。所以你不会在你的数据库中看到没有反斜杠。

由于mysql Doc(http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences):

That is, the escaped character is interpreted as if it was not escaped. For example, “\x” is just “x”.

答案 2 :(得分:0)

INSERT INTO atable VALUES ('it\'s a test')查询执行时

只有"it's a test"存储在您的数据库中:)