先来一段 PHP 连接 MySQL 的经典代码:
1 2 3 4 5 6 7 8 |
<?php $con = mysql_connect("localhost", "root", "123456"); if (!$con) { die("Could not connect: " . mysql_error()); } // some code mysql_close($con); ?> |
这没什么问题,一直这样用。后来看文档发现有个函数 mysql_pconnect(打开一个到 MySQL 服务器的持久连接)。官方文档是这样介绍的:
首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。
我们都知道建立 MySQL 连接比较消耗资源,要是能复用连接那不是牛逼了。但是 PHP 不是脚本语言吗?运行完了啥都没了,怎么维持持久连接呢?
实践是检验真理的唯一标准,还是试一试吧:
1 2 3 4 5 6 7 8 9 |
<?php // pconnect.php $con = mysql_pconnect("localhost", "root", "123456"); // connect.php // $con = mysql_connect("localhost","root","123456"); if (!$con) { die('Could not connect: ' . mysql_error()); } sleep(10); |
通过 URL 访问 pconnect.php,页面加载完成后,等待 10s ,新开浏览器再次访问。在 MySQL 命令行运行「show full processlist;」查看建立的连接:
感觉并没有复用呀,再次访问还是重新建立了连接(从 Time 字段的值可以看出),那么试试访问 connect.php :
很明显脚本执行完成连接就断了,这也是 mysql_connect 的特征,符合常理。但是怎么没有出现 mysql_pconnect 的特征呢?这种时候没办法,只能仔细再看文档,发现这么一句话:
注意,此种连接仅能用于模块版本的 PHP。