2012-12-02 68 views
1

我连接到使用
什么时候应该关闭数据库连接?

$dbh = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 

MySQL数据库在阅读通过论坛和教程,它说,它是很好的做法(虽然不是很重要)尽快关闭数据库连接,你用它完成。所以我的问题是这样的:我应该在最后一次数据库操作执行时总是添加$dbh = null;

+0

大多数Web应用程序都需要在多个点上访问数据库。只需将其保持打开状态,并在请求完成时让它自动关闭。 – PeeHaa

+0

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

+0

即使设置为null,也不是立即执行的,因为它会让PHP的垃圾回收异想天开。我怀疑它在实践中有很大的不同。 – eggyal

回答

2

当脚本完成执行时,连接隐式关闭。您可能想要关闭连接的唯一原因是您打算另外打开一个连接;即使如此,PDO也支持多个并发连接。

+0

那么这是否意味着你永远不需要关闭PDO? @DC_ – samayo

+2

@Eritrea一般来说,没有。可能会有特殊情况,但是我个人从未必须手动关闭PDO连接。 –

+0

-1:可用连接的数量是有限的限制,并且空闲连接仍会消耗资源,因此较早关闭连接会增加容量并减少负载。 – symcbean

-1

在php中,您不必经常关闭数据库连接。因为在代码完成后,Web服务器会关闭所有到数据库的连接,因为执行已结束。但是在整个执行期间,出于安全原因,您应该关闭它。但是,如果您创建了一个例子守护程序,则出于安全和内存方面的原因,您必须更频繁地关闭它。打开的连接对于直接数据库攻击总是很危险,并保留一些内存。

+0

如何关闭连接使其更安全? – PeeHaa

+0

假设你不关闭任何与MySQL相关的连接,并假设你有一个包含很多部分的应用程序,并且每个部分可以分别与db一起工作。由于他们单独执行,您将分别连接数据库。如果你不关闭其中的任何一个,你的安全问题将会出现一些内存问题。例如,如果MySQL达到其最大连接限制,则应用程序将会死亡。然后,对应用程序的每个查询都将被视为对MySQL的DOS攻击。最终,你的服务器将会因为大量未处理的mysql查询而死亡。 – mtndesign

+0

您不打开多个连接。你打开一个并将其传递给所有需要它的“片段”。如果你需要在你的应用程序中打开很多不同的连接,你经常会犯这样的错误。 – PeeHaa