在php中使用关闭数据库连接

Kap*_*rma 7 php propel doctrine symfony1 database-connection

我总是假设关闭数据库连接始终是一个好习惯,无论数据库/ ORM如何,如mysql_close(),Propel :: close()等.

参考我的其他的一个问题,并在互联网上其他一些研究,我认识了一个令人惊讶的面孔,大多数人建议,如果你的连接紧密连接始终被请求后关闭并不重要.

但是我发现这些答案很难消化.原因是,为什么所有DB lib,ORM都提供close方法?如果它存在,在每个ORM/lib中,必须有一些很好的使用它.

有人可以说明在什么情况下,我们应该用close方法关闭数据库连接?如果这些方法根本没用,为什么它们存在于所有db libs/ORM中?

编辑

我的结论

这是Bondye和Fluffeh之间的一次很好的讨论,它清除了我对使用连接关闭的疑虑.感谢他们两个.

  • 如果您的脚本预计持续时间不到100毫秒,请不要打扰关闭连接.
  • 但是:如果脚本预计会持续更长时间,并且在最后一次数据库操作和脚本关闭之间有一段时间,则通过调用*close()为其他人提供免费连接.

我真的很难接受一个答案,因为答案都是正确的.只需接受所有评论的回答,以便保持最佳状态.但+1正确答案.

Ron*_*den 7

使用mysql_close()通常是不必要的,因为非持久打开链接在脚本执行结束时自动关闭.

释放资源

由于PHP 4的Zend引擎引入了引用计数系统,因此不会自动检测到没有更多引用的资源,并且它被垃圾收集器释放.因此,很少需要手动释放内存.

希望这对你有所帮助.

(来源)

编辑:

目的mysql_close()也是为了节省计算机资源,但使用它的另一个关键原因是MySQL服务器可以接受的连接数量有限,如果有几个客户端无缘无故地打开连接,那么服务器很可能需要拒绝其他等待的客户.当然这是一件坏事,因此,如果您认为在上一次使用数据库和脚本结束之间会有一段时间mysql_free_result(),那么调用是很好的mysql_close().


Flu*_*feh 6

在不再需要数据库连接时关闭数据库连接始终是一种好习惯.即使它在脚本结束后自动关闭 - 可能是另一秒或一段时间后分秒.如果你不再需要它,一个用户击中页面,浪费半秒数据库连接不会有所作为-只有二十做一次突然打开连接10秒-这确实有所作为.

同时,重新使用连接可能是一个很好的做法 - 制作和打开连接通常需要至少几毫秒 - 如果你是插入几十万行,那么每次几毫秒真的加起来快速.

在某种程度上,将变量设置为NULL或取消设置也没有什么不同.你不具备做,但干净优雅的代码和资源管理是总是一件好事.