【发布时间】:2013-03-04 21:30:23
【问题描述】:
我注意到 PDO 没有关闭功能。我应该关闭连接还是 PDO 不需要?
【问题讨论】:
我注意到 PDO 没有关闭功能。我应该关闭连接还是 PDO 不需要?
【问题讨论】:
这个问题取决于项目类型和连接类型。
在我几乎所有的项目中,我从不手动关闭连接。在 PHP 中,连接(除非它是持久连接)只会在请求期间打开。所以无论如何手动关闭它是毫无用处的。
当我查看没有持久连接的项目时,非常很难知道何时手动关闭连接。一旦一个项目变得比几个文件大(并且各个组件不知道它们应该如何相互了解),就很难知道何时仍然需要连接。
在需要时再次打开连接比在请求期间保持打开状态要昂贵得多。
虽然在使用持久连接时会出现您需要手动关闭连接的情况。
所以回答你的问题:
我注意到 PDO 没有关闭功能。
您可以在 PHP 中取消对象引用(以及对该对象的所有引用)以手动关闭连接。
我应该关闭连接还是 PDO 不需要?
在大多数情况下,没有必要。
【讨论】:
PDO objecto 设置为 NULL ($pdo = NULL) 并使用PDO::ATTR_PERSISTENT => true(持久连接)创建了 PDO 对象,它会关闭连接还是 PHP 会忽略该指令因为连接是持久的?
成功连接到数据库后,PDO 类的实例将返回到您的脚本。该连接在该 PDO 对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁该对象——您通过将 NULL 分配给保存该对象的变量来做到这一点。如果您没有明确地这样做,PHP 将在您的脚本结束时自动关闭连接。
http://php.net/manual/en/pdo.connections.php
所以答案是否定的,你不需要做任何事情,除非你需要在脚本执行期间出于某种原因显式关闭连接,在这种情况下,只需将你的 PDO 对象设置为 null。
【讨论】:
来自 PDO 的 connection 页面
成功连接到数据库后,PDO 类的实例将返回到您的脚本。该连接在该 PDO 对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁该对象 - 您可以通过将 NULL 分配给保存该对象的变量来做到这一点。
如果您不明确执行此操作,PHP 将在您的脚本结束时自动关闭连接。
我宁愿使用持久连接。不过,最好在脚本末尾关闭所有连接。
【讨论】: