对于PHP函数mysqli\u real\u escape\u string(),$link的用途是什么?

对于PHP函数mysqli\u real\u escape\u string(),$link的用途是什么?,php,mysqli,Php,Mysqli,PHP文档注意到,链接标识符是转义字符串所必需的: 字符串mysqli\u real\u escape\u字符串(mysqli$link,字符串$escapestr) $link有什么用途?为什么需要$link来转义字符串?而$link的不同有效值如何可能导致mysqli\u real\u escape\u string的不同返回值呢?请参考下面的“编辑” 根据手册: 注意: 对于那些习惯于使用mysql_real_escape_string()的人,请注意mysqli_real_esca

PHP文档注意到,链接标识符是转义字符串所必需的:

字符串mysqli\u real\u escape\u字符串(mysqli$link,字符串$escapestr)

$link有什么用途?为什么需要
$link
来转义字符串?而
$link
的不同有效值如何可能导致
mysqli\u real\u escape\u string
的不同返回值呢?

请参考下面的“编辑”

根据手册:

注意: 对于那些习惯于使用mysql_real_escape_string()的人,请注意mysqli_real_escape_string()的参数与mysql_real_escape_string()的预期不同。链接标识符在mysqli_real_escape_string()中位于第一位,而要转义的字符串在mysql_real_escape_string()中位于第一位

以及来自用户提供的注释:

注意,如果没有打开连接,mysqli\u real\u escape\u string()将返回一个空字符串

现在,需要连接的
mysqli.*
函数需要连接

在过去,某些
mysql\u
函数,如
mysql\u real\u escape\u string()
,假定连接已打开,但在
mysqli\u
中未打开

依照

链接标识符 MySQL连接。如果未指定链接标识符,则假定由打开的最后一个链接。如果找不到这样的链接,它将尝试创建一个链接,就像在没有参数的情况下被调用一样。如果未找到或建立连接,将生成E_警告级别错误

更多关于
mysqli\uu
API的信息:


编辑:在看到关于我没有回答“为什么”的评论后,我发现了以下关于信息安全堆栈交换的问答,这将更好地解释这一点:

进一步查阅下面的“编辑”

根据手册:

注意: 对于那些习惯于使用mysql_real_escape_string()的人,请注意mysqli_real_escape_string()的参数与mysql_real_escape_string()的预期不同。链接标识符在mysqli_real_escape_string()中位于第一位,而要转义的字符串在mysql_real_escape_string()中位于第一位

以及来自用户提供的注释:

注意,如果没有打开连接,mysqli\u real\u escape\u string()将返回一个空字符串

现在,需要连接的
mysqli.*
函数需要连接

在过去,某些
mysql\u
函数,如
mysql\u real\u escape\u string()
,假定连接已打开,但在
mysqli\u
中未打开

依照

链接标识符 MySQL连接。如果未指定链接标识符,则假定由打开的最后一个链接。如果找不到这样的链接,它将尝试创建一个链接,就像在没有参数的情况下被调用一样。如果未找到或建立连接,将生成E_警告级别错误

更多关于
mysqli\uu
API的信息:


编辑:在看到关于我没有回答“为什么”的评论后,我发现了以下关于信息安全堆栈交换的问答,这将更好地解释这一点:


    • 这是一个很好的、非常符合逻辑的问题。事实上,为什么我们需要一个连接来进行一些小的字符串操作——为某些字符添加斜杠

      所有这些麻烦都与角色集有关

      $link包含一个mysqli连接。mysqli连接包含关于当前字符集的信息。这个信息是正确转义字符串所必需的,取决于字符集。因此,对于一些不同的(尽管很奇怪)字符集,结果确实会有所不同

      可以在中找到不同的返回值示例

      这就是为什么
      mysqli\u real\u escape\u string()
      本身没有什么好处,但应该始终在通过
      mysqli::set\u charset()设置正确的字符集之后使用


      另一方面,我必须说这个功能已经过时了。与其手动转义,不如使用准备好的语句(鉴于mysqli的这种机制是一个大型WTF,强烈建议使用PDO)。

      这是一个很好的逻辑问题。事实上,为什么我们需要一个连接来进行一些小的字符串操作——为某些字符添加斜杠

      所有这些麻烦都与角色集有关

      $link包含一个mysqli连接。mysqli连接包含关于当前字符集的信息。这个信息是正确转义字符串所必需的,取决于字符集。因此,对于一些不同的(尽管很奇怪)字符集,结果确实会有所不同

      可以在中找到不同的返回值示例

      这就是为什么
      mysqli\u real\u escape\u string()
      本身没有什么好处,但应该始终在通过
      mysqli::set\u charset()设置正确的字符集之后使用


      另一方面,我必须说这个功能已经过时了。与其手动转义,还不如使用准备好的语句(鉴于mysqli的这种机制是一个很大的WTF,因此强烈建议使用PDO)。

      阅读文档的功能令人惊叹;-)无论如何,你好,弗雷德!回答得好。不幸的是,这并不能真正回答“为什么?”@Phil你是对的,我做了一个编辑,其中包含了我在进一步研究这一问题时发现的一个相对链接。阅读文档的效果令人惊讶;-)无论如何,你好,弗雷德!回答得好。不幸的是,这并不能真正回答“为什么?”@Phil你是对的,我在进一步研究这一问题时发现了一个相关链接,并对其进行了编辑。