【问题标题】:Is it necessary to close PDO connections是否需要关闭 PDO 连接
【发布时间】:2013-03-04 21:30:23
【问题描述】:

我注意到 PDO 没有关闭功能。我应该关闭连接还是 PDO 不需要?

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    这个问题取决于项目类型和连接类型。

    在我几乎所有的项目中,我从不手动关闭连接。在 PHP 中,连接(除非它是持久连接)只会在请求期间打开。所以无论如何手动关闭它是毫无用处的。

    当我查看没有持久连接的项目时,非常很难知道何时手动关闭连接。一旦一个项目变得比几个文件大(并且各个组件不知道它们应该如何相互了解),就很难知道何时仍然需要连接。

    在需要时再次打开连接比在请求期间保持打开状态要昂贵得多。

    虽然在使用持久连接时会出现您需要手动关闭连接的情况。

    所以回答你的问题:

    我注意到 PDO 没有关闭功能。

    您可以在 PHP 中取消对象引用(以及对该对象的所有引用)以手动关闭连接。

    我应该关闭连接还是 PDO 不需要?

    在大多数情况下,没有必要。

    【讨论】:

    • 如果我明确地将PDO objecto 设置为 NULL ($pdo = NULL) 并使用PDO::ATTR_PERSISTENT => true(持久连接)创建了 PDO 对象,它会关闭连接还是 PHP 会忽略该指令因为连接是持久的?
    【解决方案2】:

    成功连接到数据库后,PDO 类的实例将返回到您的脚本。该连接在该 PDO 对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁该对象——您通过将 NULL 分配给保存该对象的变量来做到这一点。如果您没有明确地这样做,PHP 将在您的脚本结束时自动关闭连接。

    http://php.net/manual/en/pdo.connections.php

    所以答案是否定的,你不需要做任何事情,除非你需要在脚本执行期间出于某种原因显式关闭连接,在这种情况下,只需将你的 PDO 对象设置为 null。

    【讨论】:

    • 关闭连接是个不错的做法。在内存泄漏方面,其他语言并没有那么慷慨。
    • @RPM 确实如此。我同意这也是一个好主意,以防脚本写得不好并且在无限循环中运行或花费太长时间。如果连接未被使用,则无需保持连接。
    • @RPM 除非您有特定的理由,否则关闭它是没有意义的。另外,如果你的脚本运行时间过长,它会被杀死并关闭连接。
    • @Brad,关闭连接并非毫无意义。每个连接都占用数据库服务器中的资源。大多数服务器都配置了最大并发连接数。如果您主动关闭连接,则可以为另一个线程释放该插槽,从而获得更好的整体吞吐量。
    • @BillKarwin 如果您编写的脚本无论如何都会立即结束,那是没有意义的。我完全同意,如果您正在编写任何在初始查询后不需要数据的长时间运行的东西,那么您应该关闭它。
    【解决方案3】:

    来自 PDO 的 connection 页面

    成功连接到数据库后,PDO 类的实例将返回到您的脚本。该连接在该 PDO 对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁该对象 - 您可以通过将 NULL 分配给保存该对象的变量来做到这一点。

    如果您不明确执行此操作,PHP 将在您的脚本结束时自动关闭连接。


    编辑

    我宁愿使用持久连接。不过,最好在脚本末尾关闭所有连接。

    【讨论】:

    • 您认为始终关闭您的 PDO 连接是个好主意吗?
    • @BenjaminGruenbaum 已编辑。
    • 完成后关闭 PDO 连接是个好主意。
    • @RPM "完成后关闭 PDO 连接是个好主意" [需要引用]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2013-08-19
    • 1970-01-01
    • 2020-11-22
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多