【问题标题】:Closing a MySQL connection in PHP在 PHP 中关闭 MySQL 连接
【发布时间】:2012-08-04 11:58:29
【问题描述】:

我只是想知道,在页面末尾用 PHP 关闭 MySQL 连接是否很好?有什么优势?关了有关系吗?

真诚地, 乔伊

【问题讨论】:

标签: php mysql


【解决方案1】:

通常不需要使用 mysql_close(),因为非持久打开的链接会在脚本执行结束时自动关闭,但请记住,一旦不再需要资源,就立即终止它们始终是一个好习惯。如果您的脚本长时间占用您不再需要的资源,只会让您更接近资源耗尽

【讨论】:

    【解决方案2】:

    无论如何,PHP 都会在脚本结束时释放任何资源。

    例如,最好释放文件资源并锁定文件,因为您的脚本可能会以 1s 形式运行,但您可能只需要在脚本开始时的几毫秒内使用该文件。

    如果您在开始时使用 SQL 几毫秒,则使用相同的推理,然后只处理提取的数据 - 通过关闭您的连接,您允许另一个连接代替您的位置(MySQL 限制同时有多少可以建立连接)。

    另一方面,如果您在脚本结束时释放它,因为您在脚本的整个执行过程中(间歇性地)使用数据库,那么您只是在做 PHP 在脚本结束时无论如何都会做的事情。

    【讨论】:

      【解决方案3】:

      是的,使用后关闭连接是一种很好的做法,它可以减轻数据库的负担。性能会有所提高。 资源使用完毕后,应始终释放资源,以供其他用户使用。

      【讨论】:

        【解决方案4】:

        如果您的意思是使用持久连接:通常(99.99% 的时间)使用持久连接不是(!)非常明智的做法。当然不是在使用事务时。每个请求打开和关闭连接的性能损失并不大。

        PHP 持久连接不好,因为...

        • 它们会导致事务、表锁、临时表、会话变量和 MySQL 中的大多数其他有用功能非常危险,可能会在页面生成期间导致服务器范围的死锁和数据库错误。
        • 它们占用了数百个 MySQL 套接字和线程,增加了在某处达到限制的风险(打开文件、mysql 设置、内核限制?)。
        • 当某些东西因为持久连接而中断时,诊断肯定是极其困难的,因为它只会在某个线程以某种顺序处理了某些请求后才会出现。
        • 有了一个网络服务器池,一个慢速网络服务器可以备份并消耗太多无法使用的连接,以至于其他服务器无法创建连接来完成它们的请求。

        例如看这篇文章。

        http://meta.wikimedia.org/wiki/Why_persistent_connections_are_bad

        一般来说,尽快显式释放您获得的所有资源也是一种很好的编程习惯,因为它们可以被竞争的例程脚本使用。使用构造函数和析构函数(“智能资源”)是一种很好的方法。在 PHP 中,您的脚本可能以致命错误结束,在这种情况下您没有机会自己释放它们。

        【讨论】:

        • 在脚本结束之前的某个时间调用析构函数(我不记得是在注册的关闭函数之前还是之后)。因此,由于在对象超出范围后不会立即调用它们,因此它们的用处非常有限。
        • 同意。 PHP 不是 C++ 或 Java。
        【解决方案5】:

        $conn = new mysqli("localhost","Username","Password","Db_name");

        $sql = "SELECT * FROM `your_table_name`";
        
        $connStatus = $conn->query($sql);
        
        $numberOfRows = mysqli_num_rows($connStatus);
        
        $numberOfRows; 
        
        //this echo out the total number of rows returned from the query
        
        $conn->close();
        

        【讨论】:

          猜你喜欢
          • 2013-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多