以下之间有什么区别:
// 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服务器的连接不会关闭。相反,该链接将继续开放供将来使用。