PHP pconnect和连接测试失败

<?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并连接.

以上是代码,下面是结果.

正常运行时间:697914主题:1个问题:1530慢查询:0打开:91刷新表:1打开表:0每秒查询平均值:0.2 false

正常运行时间:697914主题:2个问题:1530慢查询:0打开:91刷新表:1打开表:0每秒查询平均值:0.2 false

如你所见,两者都是错误的.它应该是pconnect不会显示错误,不是吗?因为pconnect正在等待超时.但事实并非如此.

而且,当我真的关闭$connp时,它无法查询任何sql语句.因此,pconnect与connect完全相同.

我已经在php.inc中打开了持久性.请告诉我我有什么问题.谢谢大家.

最佳答案 在大多数情况下,没有理由将mysql_close()与持久连接结合使用,但下面会有一些解释.

首先,您应该区分资源(PHP变量,内部:zval)和连接(例如TCP或套接字连接,即“链接”).

当您调用mysql_connect()时,每次都会创建一个新连接并返回一个新资源.在同一脚本中多次调用mysql_connect()将创建多个连接,并返回相应的资源.

当您调用mysql_pconnect()时,仅当在当前PHP进程中找不到活动持久连接并且每次还返回新资源时,才会创建新连接.多次调用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
62
点赞