【问题标题】:what is the downside of not closing a mysql connection in php script?在 php 脚本中不关闭 mysql 连接的缺点是什么?
【发布时间】:2014-07-20 16:53:27
【问题描述】:

我正在通过使用 mysqli_connect 函数建立连接来访问 php 脚本中的数据库。我观察到在脚本末尾关闭连接不是强制性的。

在为访问 php 中的 mysql 数据库而创建的连接脚本中不使用 mysqli_close() 有何影响?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    如果您使用 cgi,则无需关闭 mysql 连接,因为它们会在脚本执行结束时自动关闭。

    来自documentation

    注意:服务器的链接将在执行后立即关闭 脚本结束,除非它通过显式调用提前关闭 mysql_close()。

    虽然关闭连接被认为是一种好习惯。

    如果您自己关闭连接:

    • 您必须检查每个查询的$_connected 的值。这意味着 PHP 必须检查变量 $_connected A) 是否存在 B) 是布尔值,C) 是真/假。
    • 您必须调用“断开连接”函数,而函数调用是 PHP 中更昂贵的操作之一。 PHP 必须检查 您的功能 A)存在,B)不是私有/受保护的,C)您 为您的函数提供了足够的参数。它还必须创建一个 在新的本地范围内复制 $connection 变量。
    • 然后您的“断开连接”函数将调用 mysql_close(),这意味着 PHP A) 检查 mysql_close() 是否存在和 B) 您提供的 mysql_close() 和 C) 所需的所有参数,它们是正确的 类型(mysql 资源)。

    因此,如果您不使用持久连接,您的 MySQL 连接将在页面执行结束时关闭。所以你不必为此烦恼。因此没有缺点。

    【讨论】:

      【解决方案2】:

      如果您相当确定您不会再次使用该连接,或者没有管理您打开的连接的类,那么关闭是一种很好的做法。几个原因:

      1. 如果您正在循环或在某些东西上创建连接而不关闭之前的连接,您可能会根据在 sql 服务器端设置的任何限制吃掉所有可用的数据库连接。通常,此限制适用于所有人,而不是每个主机,因此您也可以阻止其他人连接。
      2. 来自 Zend(可能已过时):打开的连接(和类似资源)在脚本执行结束时自动销毁。但是,您仍应在不再需要时立即关闭或释放所有连接、结果集和语句句柄。这将有助于更快地将资源返回给 PHP 和 MySQL。

      【讨论】:

        猜你喜欢
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多