我在PDO手册中读到,要关闭连接,您应该使用以下内容:
$connection = null;
但是,有些人建议由于PHP 5.3有一个新的GC,因此应该使用以下内容:
unset($connection);
我需要一劳永逸地知道哪一个是首选,或者它们是相同的?
答案 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会为你关闭它。
请注意,您的应用程序当然必须设计得很好,而不需要以机枪的速度重新连接到不同的数据库。即使在后一种情况下,您使用关闭的方法也是最不重要的问题。你正在咆哮着最糟糕的树。处理连接数,而不是关闭它们的方式。