mysqli_real_escape_string的PHP文档指出,转义字符串需要链接标识符:
string mysqli_real_escape_string(mysqli $ link,string $ escapestr)
$ link的目的是什么?为了逃避字符串,为什么$link
是必需的?那么$link
的不同有效值如何能够为mysqli_real_escape_string
带来不同的回报值呢?
答案 0 :(得分:4)
这是一个很好且非常合乎逻辑的问题。实际上,为什么我们需要连接一个小字符串操作 - 为某些字符添加斜杠?
所有这些麻烦都与角色有关。
$ link包含mysqli连接。 mysqli连接包含有关当前字符集的信息。并且这些信息是正确转义字符串所必需的,取决于charset。所以对于一些不同的(虽然很奇怪的)字符集,结果确实会有所不同。
可以在this answer中找到不同的返回值示例。
这就是为什么mysqli_real_escape_string()
本身没有好处,但应该在通过mysqli::set_charset()
另一方面,我必须说这个功能已经过时了。而不是手动转义,应该使用预备语句(并且,使用mysqli,这个机制是一个大的WTF,强烈建议使用PDO)。
答案 1 :(得分:3)
请参阅下面的“编辑”。
根据手册:
<强> 注意:的强> 对于那些习惯使用mysql_real_escape_string()的人,请注意mysqli_real_escape_string()的参数与mysql_real_escape_string()所期望的不同。链接标识符首先出现在mysqli_real_escape_string()中,而要转义的字符串首先出现在mysql_real_escape_string()中。
来自用户贡献的笔记:
注意,如果没有打开连接,mysqli_real_escape_string()将返回一个空字符串!
现在需要在需要它的mysqli_*
函数中建立连接。
过去,某些mysql_
函数(例如mysql_real_escape_string()
)假定连接已经打开,但不在mysqli_
中。
<强> link_identifier 强> MySQL连接。如果未指定链接标识符,则假定由mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就像没有参数调用mysql_connect()一样。如果未找到或建立连接,则会生成E_WARNING级别错误。
有关mysqli_
API的更多信息:
编辑:在看到关于我没有回答“为什么”的评论后,在信息安全堆栈交换中找到了以下问答,这将更好地解释这一点: