【问题标题】:PDO MySQL Connection close - unset vs nullPDO MySQL 连接关闭 - 未设置与空
【发布时间】:2014-05-12 16:13:22
【问题描述】:

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

$connection = null;

但是,有人建议,由于 PHP 5.3 有新的 GC,所以应该使用以下内容:

unset($connection);

我需要一劳永逸地知道,哪个是首选,还是相同?

【问题讨论】:

  • 你认为你为什么想要它?您目前是否遇到任何由这种困境引起的特殊问题?
  • 是的,连接太多会导致我的系统性能低下。在我完成整个循环之前,我需要知道如何正确更改它。
  • -1 表示每次执行脚本有多个连接,这显然对系统性能很不利。
  • 运行多个数据库时我别无选择。 -1 无故给予 -1。

标签: php pdo


【解决方案1】:

他们做同样的事情。取消设置 $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 脚本终止(无论如何都会断开连接)之前看到连接已断开。

【讨论】:

  • 我看到的唯一 small 区别是unset() 会破坏变量。这意味着var_dump($pdo); 会抛出错误Undefined variable
  • @HamZa,谢谢,这是真的!我应该说,他们在关闭数据库连接方面做同样的事情。
  • 从字面上回答 OP 的答案,但没有解决 OP 的任何问题。我称之为“SO-way”。
【解决方案2】:

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

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

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

这是为 postgres 准备的。对于我用过的mysql:

$pdo->query('KILL CONNECTION CONNECTION_ID();');

【讨论】:

    【解决方案3】:

    使用

    $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。

    【讨论】:

      【解决方案4】:

      根本不用担心关闭。 PHP 会为你关闭它。

      请注意,您的应用程序当然必须经过合理的设计,而不需要以机枪的速度重新连接到不同的数据库。即使在后一种情况下,您用来关闭的方法也是最少的问题。你在吠叫最错误的树。处理连接的数量,而不是关闭它们的方式。

      【讨论】:

      • 这完全不真实,而且是非常糟糕的建议。一些 php 脚本是长时间运行的,在启动一个长任务之前需要从数据库中获取一些数据,并且你不想让一个连接槽在睡眠中保持打开状态。必须有一种正确的方法来关闭+释放 PHP 中的任何资源:对于网络、数据库连接、套接字或其他任何东西都是如此。依靠 = null;分配是非常错误的,恕我直言。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2021-04-14
      • 2013-08-19
      • 1970-01-01
      • 2014-12-18
      • 2013-10-16
      相关资源
      最近更新 更多