PHP mysqli_real_escape_字符串问题

PHP mysqli_real_escape_字符串问题,php,mysqli,Php,Mysqli,我有几个post变量,我将执行以下操作: $input_name = mysqli_real_escape_string($dbc, trim($_POST['input_name'])); 我已经运行了几个测试,在执行insert查询之前回显$input_name和其他类似的变量。回声表明他们确实在逃脱 但是,当我登录到phpmyadmin查看数据库中的条目时,我发现应该转义的字符不是。我这里有问题吗?变量声明和查询之间是否发生了我不知道的事情 是否有php或服务器设置可能会影响这一点 注

我有几个post变量,我将执行以下操作:

$input_name =  mysqli_real_escape_string($dbc, trim($_POST['input_name']));
我已经运行了几个测试,在执行insert查询之前回显$input_name和其他类似的变量。回声表明他们确实在逃脱

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

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


注意:我意识到PDO是一种方法,我只是在这个特殊的时刻不在那里。

PHP中的*\u real\u escape\u string函数只是为了防止SQL注入,因此它只会更改为“to\”和“to\”,以便以下查询:

SELECT * FROM users WHERE pass = '' OR '1'='1 --
将成为:

SELECT * FROM users WHERE pass = '\' OR \'1\'=\'1 --
这样注入的值就不起作用了。

回波表明它们确实得到了应有的逃逸

这表示您的字符已转义

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

现在,转义意味着您希望按原样替换这些字符,而不是在PHP或数据库内部将它们作为分隔符

例如,如果您希望输入的内容保持原样,那么您将对其进行转义。 所以现在,当数据库(mysql)看到它时,它将被转义,因此它不会将它视为mysql中用于字符串文本的
单引号

如果你不逃避它,那么MySQL会把两个代码< >代码>之间的所有部分当作字符串文字。


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

该函数会将“hel'lo”之类的内容更改为“hel'lo”,这样就可以安全地插入数据库,一旦它进入数据库,它将再次看起来像“hel'lo”,但是将被插入,并且不会导致SQL错误。您转义了某些内容并将其连接到
INSERT
查询字符串中,插入的内容看起来不会像转义的。想想
插入blah(field)值(“这是“愚蠢的”)
,它会插入
这是“愚蠢的”
,但不会插入
这是“愚蠢的”
。我建议,如果你在与mysqli让你跳过去的圈圈作斗争,而这太糟糕了,你必须发帖子才能解决它,这是一个开始研究PDO的理想时机。@AndyLester我不认为这个问题与mysqli有任何关系。PDO的数据看起来也一样。