【问题标题】:Close db connection after each query or end of script每次查询或脚本结束后关闭数据库连接
【发布时间】:2014-01-29 11:38:27
【问题描述】:

这是一个使用 mysqli 的 php 应用程序。

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

当前系统有单例数据库连接,因此这里不存在过度创建的新连接问题。只有未使用的打开连接。(比如说,脚本还没有完成执行,数据库没有自己关闭。)

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

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

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

那么哪种方式更好呢?

【问题讨论】:

  • 我一直在做的是让数据库连接保持打开状态,但在处理后关闭每个 mysqli 语句,就像它们在示例 php.net/manual/en/mysqli-stmt.prepare.php 中显示的那样,然后在任何“出口点”关闭数据库连接例如在错误退出时

标签: php mysql database-connection


【解决方案1】:

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

原因可能是:

  1. 不使用索引的慢查询
  2. 其他一些高延迟阻塞 IO(文件读取、解码等)

您将在解决这些问题的努力方面获得更好的收益,而不是查看您如何打开和关闭连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多