PHP& mysqli:持久连接和交互式有什么区别?

时间:2012-07-08 15:07:06

标签: php mysqli persistent-connection interactive-mode

以下内容有何不同之处:

// Persistent connection
$mysqli->real_connect("p:" . $host, $user, $pass, $db, null, null, 0);

// Interactive connection
$mysqli->real_connect($host, $user, $pass, $db, null, null, MYSQLI_CLIENT_INTERACTIVE);

甚至是这个......

// Interactive AND persistent
$mysqli->real_connect("p:" . $host, $user, $pass, $db, null, null, MYSQLI_CLIENT_INTERACTIVE);

2 个答案:

答案 0 :(得分:2)

我对文档的解释......

持久连接无限期保持打开状态。非持久性连接不是。

mysql_pconnect()文档比real_connect()文档更清晰:

  

mysql_pconnect()与mysql_connect()非常相似,但有两个主要区别。

     

首先,在连接时,该函数将首先尝试查找已使用相同主机,用户名和密码打开的(持久)链接。如果找到一个,将返回一个标识符,而不是打开一个新连接。

     

其次,当脚本的执行结束时,不会关闭与SQL服务器的连接。相反,链接将保持打开以供将来使用(mysql_close()不会关闭mysql_pconnect()建立的链接。)

     

因此,这种类型的链接称为“持久性”。

关于MYSQLI_CLIENT_INTERACTIVE

  

MYSQLI_CLIENT_INTERACTIVE

     

在关闭连接之前,允许 interactive_timeout 秒(而不是 wait_timeout 秒)不活动。客户端的会话wait_timeout变量将设置为会话interactive_timeout变量的值。

通常,非持久连接在 wait_timeout 变量指定的秒数后关闭。使用此标志后,它们会在 interactive_timeout 变量指定的秒数后关闭。

根据我的解释,这意味着 MYSQLI_CLIENT_INTERACTIVE 不会改变持久性连接的行为。

答案 1 :(得分:1)

当您使用第一个时,mysqli尝试查找已使用相同主机,用户名和密码(NOT PORT)打开的(持久)链接。如果找到一个,将返回一个标识符,而不是打开一个新连接。

当脚本的执行结束时,不会关闭与SQL Server的连接。相反,该链接将保持打开以供将来使用。