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


PHP & mysqli: What is the difference between persistent connection and interactive?

以下之间有什么区别:

// 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);

只是我对文档的解释。。。

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

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

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

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

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

因此,这种类型的链接被称为"持久"。

关于MYSQLI_CLIENT_INTERACTIVE:

MYSQLI_CLIENT_interactiveatr

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

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

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

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

脚本执行结束时,与SQL服务器的连接不会关闭。相反,该链接将继续开放供将来使用。