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

时间:2018-09-05 18:18:01

标签: php mysql escaping

我使用以下代码大致识别机器:

$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,like Gecko)Chrome / 68.0.3440.106 Safari / 537.36RemoteAddress ::: 1

     

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

如您所见,它们是完全相同的,并且看起来转义没有做任何事情,因为两个字符串都包含未转义的反斜杠和分号。可能是什么原因造成的?

1 个答案:

答案 0 :(得分:2)

根据文档

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

  

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

因此分号(;)不是该函数转义(或添加)的字符。