0

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

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

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

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

是否有可能影响这一点的 php 或服务器设置?

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

4

2 回答 2

1

PHP 中的 *_real_escape_string 函数只是为了防止 SQL 注入,因此它只会将 " 更改为 \" 和 ' 更改为 \' 以便以下查询:

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

会变成:

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

这样注入的值就不起作用了。

于 2012-12-07T06:37:40.857 回答
1

回声表明他们确实得到了应有的逃脱。

这表明您的字符已转义。

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

现在,当您转义时,意味着您想要这些字符,而不是 PHP,或者您的数据库在内部将它们作为分隔符。

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

如果您不对其进行转义,那么 MySQL 会将两者之间的所有部分'视为字符串文字。

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

于 2012-12-07T06:40:36.697 回答