在每个查询或脚本结束后关闭数据库连接

时间:2014-01-29 03:10:20

标签: php mysql database-connection

使用mysqli的php应用程序。

其他人建议在每次查询后立即关闭数据库连接。

当前系统具有单例数据库连接,因此此处不会出现过度创建的新连接问题。只有未使用的打开连接。(比如,脚本没有完成执行,数据库本身也没有关闭。)

所以似乎有一些东西需要平衡 - 在等待脚本完成的成本和每个脚本的多个不必要的数据库连接关闭之间。我倾向于认为第一个更安全。但我不太确定它是否足够。例如,如果我这样做:

$userA->sendMessageTo($userB);
And inside this:
$userA->send($userB);
$userA->useSomePoints();
$userA->flushPointsBalance();
....

想象每个方法都会有一些数据库操作,但这只是一个脚本调用/请求,如果在每个查询周围发生数据库打开/关闭,这肯定会发生多次,相比之下,在每个查询后不立即关闭它方法范围。

那么哪种方式更好?

1 个答案:

答案 0 :(得分:0)

通常,让您的DB包装器类(或ORM)为整个请求创建一个连接,并且只在清理期间(通过析构函数或通过PHP的清理)关闭它是可以的。如果这是一个问题,这可能意味着在你打开和关闭连接之间会发生很长的事情,而这正是你应该解决的问题。

原因可能是:

  1. 不使用索引的慢查询
  2. 其他一些高延迟阻塞IO(文件读取,解码等)
  3. 在努力解决这些问题方面你会获得更好的收益,而不是看你如何打开和关闭连接。