<?php
$connp = mysql_pconnect("localhost", "root", "password");
echo mysql_stat($connp);
mysql_close($connp);
if(!mysql_ping($connp)){
echo " false";
}
echo "<br />";
$conn = mysql_connect("localhost", "root", "password");
echo mysql_stat($conn);
mysql_close($conn);
if(!mysql_ping($conn)){
echo " false";
}
echo "<br />";
?>
大家好
我已经测试了php pconnect和connect。
上面是代码,下面是结果。
正常运行时间:697914线程:1个问题:1530慢查询:0打开:91刷新表:1开放的table:每秒0个查询平均值:0.2假
正常运行时间:697914线程:2个问题:1530慢查询:0打开:91刷新表:1开放的table:每秒0个查询平均值:0.2假
正如您所看到的,两者都回显false。应该是pconnect不会显示false吧?因为pconnect正在等待超时。但事实并非如此。
而且,当我真正关闭$connp时,它不能查询任何sql语句。因此,pconnect的执行与connect完全相同。
我已经打开了www.example.com的持久性php.inc。请告诉我我有什么错。谢谢大家。
1条答案
按热度按时间jdgnovmf1#
在大多数情况下,没有理由将mysql_close()与持久连接结合使用,但下面有一些解释。
首先,您应该区分resource(一个PHP变量,内部:zval)和连接(例如,TCP或套接字连接(也称为“链接”)。
调用mysql_connect()时,每次都会创建一个新的连接,并返回一个新的资源。在同一脚本中多次调用mysql_connect()将创建多个连接,并返回相应的资源。
当调用mysql_pconnect()时,只有在当前PHP进程中没有找到活动的持久连接时,才会创建新的连接**,并且每次都返回新的资源。多次调用mysql_pconnect()将返回不同的 resources,它们都指向同一个 connection。
mysql_close()会对连接和资源都有动作:
1.如果资源指向的连接不是持久连接,则连接关闭。
1.在每种情况下,* 资源 * 都会被破坏。
这确实意味着在持久连接上使用mysql_close(),即使这个连接仍然打开,你也无法再使用这个连接,你可以使用以下命令调试:
然后在MySQL中查看连接是否仍然处于活动状态:
如果你在error_reporting中启用了警告,你会看到这样的消息:
使用之前创建的持久连接的唯一方法是重新创建一个指向它的新资源:
在资源上使用mysql_thread_id()会给予你MySQL连接标识符,这样你就可以确保mysql_close()不会关闭持久连接,而只会破坏资源:
这将输出如下内容: