PHP mysqli_real_escape_string问题

时间:2012-12-07 06:33:32

标签: php mysqli

我有几个帖子变量,我通过以下方式运行:

$input_name =  mysqli_real_escape_string($dbc, trim($_POST['input_name']));

我已经运行了几个测试,我在插入查询执行之前回显$ input_name和其他类似的变量。回声表明他们确实正在逃避。

但是,当我登录phpmyadmin查看数据库中的条目时,我发现应该转义的字符不是。我这里有问题吗?我的变量声明和我不知道的查询之间发生了什么?

是否有可能影响此问题的php或服务器设置?

注意:我意识到PDO是要走的路,我在这个特定的时刻并不存在。

2 个答案:

答案 0 :(得分:1)

PHP中的* _real_escape_string函数仅用于防止SQL注入,因此它只会更改为“to”和“to”以便以下查询:

SELECT * FROM users WHERE pass = '' OR '1'='1 --

将成为:

SELECT * FROM users WHERE pass = '\' OR \'1\'=\'1 --

因此注入的值不起作用。

答案 1 :(得分:1)

回声表明他们确实正在逃避。

这表示您的角色已转义。

当我登录phpmyadmin查看数据库中的条目时,我发现应该转义的字符不是

现在,因为你正在逃避意味着你想要那些字符而不是PHP,或者你的数据库将它们内部作为分隔符。

就像你想要输入中的'一样,所以你正在逃避它。 所以现在当数据库(mysql)看到它被转义时,它不会被认为是用于MySQL中的字符串文字的single quote

如果你没有逃避它,那么MySQL会将两个'之间的所有部分视为字符串文字。

所以一切都很好,不要担心。

相关问题