为什么转义SQL值需要打开连接?

Ric*_*ler 10 php mysqli

为了清楚起见,任何人都可以解释为什么mysqli_real_escape_string必须阅读:

$query = mysqli_real_escape_string($conn,"SELECT * FROM tbl");
Run Code Online (Sandbox Code Playgroud)

而不只是:

$query = mysqli_real_escape_string("SELECT * FROM tbl");
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Ali*_*xel 10

因为charset编码.

没有$conn,mysqli_real_escape_string()将无法检测连接使用哪个字符编码,并将盲目地尝试逃避常见的危险字符 - 留下一些潜在危险的字符集黑客经历.

真实的(未模拟的)预处理语句甚至更好(或者更安全,如您所愿),因为它们考虑了列字符编码而不是连接.

  • @RichardTinkler:这个评论太短了,无法告诉你关于它们的所有信息,但它们基本上是准备好了具有文字值占位符的查询.数据库引擎(而不是客户端API实现)负责替换(和转义)各个占位符中的文字值.首先阅读http://www.php.net/manual/en/mysqli.prepare.php. (2认同)