<?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个打开的表:每秒0个查询:平均0.2false
正常运行时间: 697914线程:2个问题: 1530个慢查询:0个打开: 91个刷新表:1个打开的表:每秒0个查询:平均0.2false
如您所见,两者都是echo false。应该是pconnect不会显示false,不是吗?因为pconnect正在等待超时。但事实并非如此。
而且,当我真正关闭$connp时,它不能查询任何sql语句。因此,pconnect执行的操作与connect完全相同。
我已经在php.inc中打开了持久化。请告诉我我哪里错了。谢谢大家。
发布于 2011-02-01 16:46:26
在大多数情况下,没有理由将mysql_close()与持久连接结合使用,但以下是一些解释。
首先,您应该区分资源( PHP变量,内部为:a zval)和连接(例如,TCP或套接字连接,也称为“链接”)。
当您调用mysql_connect()时,每次都会创建一个新的连接,并返回一个新的资源。在同一脚本中多次调用mysql_connect()将创建多个连接,并返回相应的资源。
当您调用mysql_pconnect()时,只有在当前进程中没有找到活动的持久连接时,才会创建一个新的连接,并且每次都会返回一个新的资源。对mysql_pconnect()的多次调用将返回不同的资源,这些资源都指向相同的连接。
mysql_close()将在连接和资源上执行操作
这确实意味着在持久连接上使用mysql_close(),您将无法再使用此连接,即使此连接仍处于打开状态,您可以使用以下命令进行调试:
<?php
$connp = mysql_pconnect("localhost", "root", "password");
mysql_close($connp);
sleep(60);
?>并在MySQL中查看该连接仍处于活动状态:
SHOW PROCESSLIST;如果您在error_reporting中启用了警告,您将看到如下消息:
Warning: mysql_ping(): 4 is not a valid MySQL-Link resource in ... on line ...使用先前创建的持久连接的唯一方法是再次创建一个指向它的新资源:
$connp = mysql_pconnect("localhost", "root", "password");在资源上使用mysql_thread_id()将为您提供MySQL连接标识符,以便您可以确保mysql_close()不会关闭持久连接,而只是销毁资源:
<?php
$conn = mysql_connect("localhost", "root", "password");
echo mysql_thread_id($conn), "\n";
mysql_close($conn);
$connp1 = mysql_pconnect("localhost", "root", "password");
echo mysql_thread_id($connp1), "\n";
mysql_close($connp1);
$connp2 = mysql_pconnect("localhost", "root", "password");
echo mysql_thread_id($connp2), "\n";
mysql_close($connp2);
?>这将输出类似以下内容:
61
62
62https://stackoverflow.com/questions/4859462
复制相似问题