Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有必要关闭PDO连接_Php_Pdo - Fatal编程技术网

Php 是否有必要关闭PDO连接

Php 是否有必要关闭PDO连接,php,pdo,Php,Pdo,我注意到PDO没有关闭功能。我应该关闭连接还是PDO不需要 成功连接到数据库后,PDO类的实例将返回到脚本中。连接在该PDO对象的生存期内保持活动状态。要关闭连接,您需要通过确保删除对该对象的所有剩余引用来销毁该对象——您可以通过为保存该对象的变量指定NULL来完成此操作。如果不显式地执行此操作,PHP将在脚本结束时自动关闭连接 因此答案是否定的,您不需要做任何事情,除非在脚本执行期间出于任何原因需要显式关闭连接,在这种情况下,只需将PDO对象设置为null。从PDO的页面 成功连接到数据库后

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

成功连接到数据库后,PDO类的实例将返回到脚本中。连接在该PDO对象的生存期内保持活动状态。要关闭连接,您需要通过确保删除对该对象的所有剩余引用来销毁该对象——您可以通过为保存该对象的变量指定NULL来完成此操作。如果不显式地执行此操作,PHP将在脚本结束时自动关闭连接

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

从PDO的页面

成功连接到数据库后,PDO类的实例将返回到脚本中。连接在该PDO对象的生存期内保持活动状态。要关闭连接,您需要通过确保删除对该对象的所有剩余引用来销毁该对象——您可以通过为保存该对象的变量指定NULL来完成此操作

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


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

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

在我几乎所有的项目中,我从未手动关闭连接。在PHP中,连接(除非是持久连接)仅在请求期间打开。所以手动关闭它是非常无用的

当查看没有持久连接的项目时,很难知道何时手动关闭连接。一旦一个项目的大小超过了几个文件(而且各个组件对彼此都没有应有的了解),就很难知道何时还需要连接

在需要时再次打开连接比在请求过程中保持连接打开要昂贵得多

不过,在使用持久连接时,会出现需要手动关闭连接的情况

所以要回答你的问题:

我注意到PDO没有关闭功能

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

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


在大多数情况下,这是不必要的。

您认为总是关闭PDO连接是个好主意吗?@BenjaminGruenbaum编辑。在完成PDO连接后关闭PDO连接是个好主意。@RPM“在完成PDO连接后关闭PDO连接是个好主意”[需要引用]不过,关闭连接将是一个很好的实践。其他语言在内存泄漏方面并不慷慨。@RPM这是非常正确的。我同意,如果脚本写得不好,在无限循环中运行,或者需要花费太长时间,那么这也是一个好主意。如果连接未被使用,则无需保持打开状态。@RPM除非您有特定的原因,否则关闭连接是毫无意义的。此外,如果脚本运行太长,它将被终止,连接将被关闭。@Brad,关闭连接并非毫无意义。每个连接都会占用数据库服务器中的资源。大多数服务器都配置了最大数量的并发连接。如果您主动关闭连接,就可以将该插槽释放给另一个线程,从而获得更好的总体吞吐量。@BillKarwin如果您编写的脚本立即结束,则毫无意义。我完全同意,如果您在初始查询后编写任何不需要数据的长时间运行的东西,那么您应该关闭它。如果我显式地将
PDO
objecto设置为NULL(
$PDO=NULL
),并使用
PDO::ATTR_PERSISTENT=>true
(持久连接)创建PDO对象,它会关闭连接还是会因为连接是持久的而忽略该指令?