为什么mysqli_real_escape_string()不会通过转义分号和斜杠来改变我的字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么mysqli_real_escape_string()不会通过转义分号和斜杠来改变我的字符串?相关的知识,希望对你有一定的参考价值。

我有以下代码用于粗略识别机器:

$computerId = "UserAgent:".$_SERVER['HTTP_USER_AGENT']."RemoteAddress:".$_SERVER['REMOTE_ADDR'];

我使用以下代码来比较转义与未转义的字符串:

echo "Unescaped:
".$computerId."
Escaped:
".mysqli_real_escape_string($conn, $computerId);

这是我得到的输出:

未转义:UserAgent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(Khtml,与Gecko一样)Chrome / 68.0.3440.106 Safari / 537.36RemoteAddress ::: 1

转义:UserAgent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 68.0.3440.106 Safari / 537.36RemoteAddress ::: 1

正如你所看到的,它们是完全相同的,并且它看起来不像逃逸正在做任何事情,因为两个字符串都包含未转义的反斜杠和分号。可能是什么导致了这个?

答案

根据文件

http://php.net/manual/en/function.mysql-real-escape-string.php

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符: x00, n, r,,',“和 x1a。

因此,分号(;)不是由函数转义(或前置)的字符。

以上是关于为什么mysqli_real_escape_string()不会通过转义分号和斜杠来改变我的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

警告:mysqli_real_escape_string() 需要 2 个参数,1 个给定...我做错了啥? [复制]

警告:mysqli_real_escape_string() 需要 2 个参数,1 个给定...我做错了啥? [复制]

“mysqli_real_escape_string”是不是足以避免 SQL 注入或其他 SQL 攻击?

mysqli_real_escape_string 如何无法阻止 SQL 注入? [复制]

mysqli_real_escape_string 如何无法阻止 SQL 注入? [复制]

filter_var 或 mysqli_real_escape_string [重复]