【问题标题】:Does unsetting a PHP object containing a PDO object close the PDO connection?取消设置包含 PDO 对象的 PHP 对象会关闭 PDO 连接吗?
【发布时间】:2017-01-11 19:30:24
【问题描述】:

考虑以下 PHP sn-p:

$dbw = new db_writer($table_name);       // establishes a PDO connection
$success = $dbw->insert_record($record);
unset($dbw);

取消设置 $dbw 对象会导致 PDO 连接关闭吗?

我的 db_writer 类的重点是保留连接,以便在需要时,该类可以执行多个操作,而不必为每个操作建立/断开连接。因此,该类永远不会取消设置 PDO 对象,我认为它确实关闭了连接。

【问题讨论】:

  • 只是好奇,为什么要问?
  • 我可以说,在 99.9% 的情况下,如果对象是唯一具有 PDO 引用的对象,则连接将尽快关闭。
  • @YourCommonSense 我在经济共享托管计划中构建的网站通常具有集中式数据库服务器。我需要小心悬空连接。
  • @GabrielHeming 可能有多个对象实例,每个实例都有自己的 PDO 连接。一个给定的对象只有一个。
  • “悬空”是什么意思?在什么情况下会悬空?

标签: php pdo


【解决方案1】:

根据PDOdocumentation,当您将PDO 对象值设置为null 时,它会关闭连接。但是,在某些情况下,某些对象可能会一直引用 PDO 对象实例。在这种情况下,连接只会在PHP 脚本执行结束时关闭。

还有PDO::ATTR_PERSISTENT 选项允许您创建持久的PDO 连接,该连接不会在脚本执行结束时关闭,并且可以在下一次脚本运行时重复使用。

【讨论】:

  • 我想我可以添加一个“关闭”方法来破坏 PDO 对象。那将是它的唯一目的。如果我可以通过取消设置我的对象来避免这种情况,它会使我的代码更简单。我不需要或不想在其包含对象的生命周期之外保持连接。
猜你喜欢
  • 2014-10-28
  • 2013-05-29
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
相关资源
最近更新 更多