教材上说,mysql_pconnect() 是长连接,数据库脚本执行完毕后,该链接也不会关闭,但为什么我的代码显示这个链接号已经变了呢?代码如下:
function isAuthentic ($_userId,$_password){
echo "isAuthentic start!<p>";
$conn = mysql_pconnect(DBHost,DBUser,DBPassword);
echo "conn=".$conn."<br>";
}
function getStaffInfo (StaffInfo &$_POST,$ID)
{
$conn = mysql_pconnect(DBHost,DBUser,DBPassword);
echo "conn123 =".$conn."<br>";
}
我调用这两个方法
isAuthentic();
getStaffinfo();
打印的结果为:
isAuthentic start!
conn=Resource id #4
Authentic is OK.
conn123 =Resource id #6
为什么一个是4,一个是6呢? 如果是长连接,第二个不会去建立一个新的连接啊。。。请高手解答。谢谢。
问题补充:
那调用了mysql_pconnect()后, 需要关闭数据库连接吗?比如调用mysql_close(). 还是永久都不需要关闭数据库连接? 谢谢。
这个和你的服务器配置有关,我对IIS不熟悉,我以APACHE为例子。
PHP实际上是被APACHE进程调用的,APACHE根据配置不同,可以有多个进程,每个进程下有多个现成。每个进程都要调用一个php5apache2_2.dll文件,每次调用PHP文件的时候有这个DLL进行一次PHP文本的扫描和解释这行,永久连接只是:这个DLL下次在mysql_pconnect的时候直接使用上次的连接资源。
这样:你的网站长时间工作以后,在MYSQL里面可能会发现有10多个不同的连接,数字与你的APACHE配置有关。这时候每一个mysql_pconnect返回的资源号码就是这10个之一,不产生新的连接,即使是不同的PHP文件(加入你有数百个不同的PHP文件在工作也只有10多个连接)。
但是,一开始工作的时候,即使是同一个PHP文件,两次永久连接也会返回不同的连接资源号。
明白了吧。
补充:
mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别。
首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。
补充:
永久都关闭不了,只有关闭进程,或者MYSQL管理里面强制断开,或者设置APACHE进程处理多少个页面以后关闭。