PDO MySQL连接关闭 - 未设置vs null

时间:2014-05-12 16:13:23

标签: php pdo

我在PDO手册中读到,要关闭连接,您应该使用以下内容:

$connection = null;

但是,有些人建议由于PHP 5.3有一个新的GC,因此应该使用以下内容:

unset($connection);

我需要一劳永逸地知道哪一个是首选,或者它们是相同的?

4 个答案:

答案 0 :(得分:4)

他们做同样的事情。取消设置$pdo句柄并将其设置为null都会关闭连接。

您可以自己测试一下。在一个窗口中运行以下脚本,在第二个窗口中打开MySQL客户端并每隔几秒运行SHOW PROCESSLIST以查看连接何时消失。

<?php

$pdo = new PDO(..);
sleep(10);
unset($pdo);
echo "pdo unset!\n";
sleep(10);

然后将unset($pdo)更改为$pdo=null;并再次运行测试。

<?php

$pdo = new PDO(..);
sleep(10);
$pdo = null;
echo "pdo set null!\n";
sleep(10);

最后的额外sleep()可以让您在PHP脚本终止之前看到连接已经断开(这会丢弃连接)。

答案 1 :(得分:2)

我偶然发现了这个。我有一个跨越设置和拆卸的PDO对象,我无法找到必须有剩余引用的位置,因为将$ pdo设置为null无法解决问题。

http://php.net/manual/en/pdo.connections.php中的用户贡献说明讨论了延迟关闭的问题。在这里他们建议杀死当前的连接:

$ pdo-&gt; query('SELECT pg_terminate_backend(pg_backend_pid());'); $ pdo = null;

这适用于postgres。对于我使用过的mysql:

$ pdo-&gt; query('KILL CONNECTION CONNECTION_ID();');

答案 2 :(得分:-2)

使用

$pdo = null; //is an assignment to null; the variable still declared in the memory.

unset($pdo); // will call the function to distroy also the adress "@" pointed by the variable.

所以使用unset是首选。

答案 3 :(得分:-4)

根本不打算关闭。 PHP会为你关闭它。

请注意,您的应用程序当然必须设计得很好,而不需要以机枪的速度重新连接到不同的数据库。即使在后一种情况下,您使用关闭的方法也是最不重要的问题。你正在咆哮着最糟糕的树。处理连接数,而不是关闭它们的方式。