为什么 mysqli_escape_string 需要数据库连接?

why does mysqli_escape_string require a database connection?

为什么我在没有数据库连接的情况下不能使用 mysqli_escape_string 功能?

来自the documentation

Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection

它必须有连接才能知道数据库正在使用什么字符集,这样它才能使用正确的规则转义数据。

昆汀的答案归结为一个本质。

我还想补充一点,

  • 正如 Quentin 已经提到的,字符集仅在活动连接的上下文中已知 - 并且对于转义至关重要。
  • 通常,连接对象应该可用于需要它的代码的任何部分。每当您需要逃脱时,您很可能也需要使用连接。如果您的问题是 "the connection object is not reachable at this part of my code",那么您绝对应该解决这个问题!
  • 请不要尝试在 PHP 中复制 mysqli_escape_string 的行为!这只会使其容易受到攻击者的攻击。不要以为将 " 转换为 \"!
  • 就那么简单

请仔细查看#2 和#3。问这个问题让我假设您的项目中存在某种架构问题。