【问题标题】:mysql pdo connection is not closing?mysql pdo连接没有关闭?
【发布时间】:2018-08-20 12:35:38
【问题描述】:

在我的 php 脚本中,当我在某些 PDO mysql 连接上执行查询时,在检查 mysql 日志时,我看不到连接正在关闭。

PHP 代码:

?php
$db = new PDO('mysql:host=HOST;dbname=DB',USER,PASSWORD);
$db->exec("SHOW TABLES");
$db = null;
?>

Mysql 日志:

180312 18:31:45 9048429 Connect USER@HOST on DB
        9048429 Query   SHOW TABLES

不过,当我删除查询时,我可以在 Mysql 日志中看到 mysql 连接已关闭。

php代码:

?php
$db = new PDO('mysql:host=HOST;dbname=DB',USER,PASSWORD);
$db = null;
?>

Mysql日志:

180312 18:33:54 9048515 Connect USER@HOST on DB
        9048515 Quit    

我必须在我的脚本中明确关闭 mysql 连接以防止连接过多。我该怎么做?

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

使用上面的代码,Mysql 连接成功关闭。它只是退出连接没有出现在 Mysql 日志中。

查看Mysql进程列表,确认连接关闭成功。

除了上面的问题,如果有查询语句要使用pdo执行,那么pdo语句处理程序对象也需要销毁,以关闭mysql连接,如php-mysql-pdo-connection-not-closing-without-destroying-statement-handler所述。

【讨论】:

    【解决方案2】:

    如文档中所述:“成功连接到数据库后,PDO 类的实例将返回到您的脚本。该连接在该 PDO 对象的生命周期内保持活动状态。要关闭连接,您需要销毁通过确保删除对它的所有剩余引用来删除该对象 - 您可以通过将 NULL 分配给保存该对象的变量来执行此操作。如果您不明确执行此操作,PHP 将在您的脚本结束时自动关闭连接。”

    所以在你的情况下设置$db=null; 应该可以解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多