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

时间:2016-06-16 16:52:45

标签: php mysql code-injection mysql-real-escape-string

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

2 个答案:

答案 0 :(得分:5)

来自the documentation

  

转义字符串中的特殊字符以在SQL语句中使用,同时考虑连接的当前字符集

它必须有一个连接,以便它知道数据库正在使用什么字符集,以便它可以使用正确的规则来转义数据。

答案 1 :(得分:2)

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

我还想补充一点,

  • 正如Quentin已经提到的,charset只在主动连接的环境中才知道 - 并且对于转义是必不可少的。
  • 通常,连接对象应该可用于需要它的代码的任何部分。无论何时你需要逃脱,你也很可能也需要使用连接。如果您的问题是“我的代码的这一部分无法访问连接对象”,那么您肯定应该这样做!
  • 请不要试图在PHP中复制mysqli_escape_string自己的行为!这只会使其容易受到攻击者的攻击。不要认为将"转换为\"就好了!

请仔细看看#2和#3。提出这个问题让我觉得你的项目中存在某种架构问题。