我有几个帖子变量,我通过以下方式运行:
$input_name = mysqli_real_escape_string($dbc, trim($_POST['input_name']));
我已经运行了几个测试,我在插入查询执行之前回显$ input_name和其他类似的变量。回声表明他们确实正在逃避。
但是,当我登录phpmyadmin查看数据库中的条目时,我发现应该转义的字符不是。我这里有问题吗?我的变量声明和我不知道的查询之间发生了什么?
是否有可能影响此问题的php或服务器设置?
注意:我意识到PDO是要走的路,我在这个特定的时刻并不存在。
答案 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会将两个'
之间的所有部分视为字符串文字。
所以一切都很好,不要担心。