【问题标题】:Close db connection关闭数据库连接
【发布时间】:2013-10-16 19:48:54
【问题描述】:

我在网络上创建了我需要的课程。此类在她的生命周期中打开与本地 MySql 数据库的连接。

在我的代码中,这个类实例的范围是本地的,就像这个例子

function doSomething(){
    $class = new MyClass();
    // ... do something with $class
}

doSomething();

所以每次函数结束时,对象都会被销毁。但我认为 db 连接永远不会停止,因为在对 doSomething 类进行一定次数的调用后会出现错误“无法连接到数据库”。

看到类的析构函数,它执行的唯一操作是

unset($this);

unset($this) 是否也关闭数据库连接?关闭它的最佳方法是什么?

谢谢

【问题讨论】:

    标签: php destructor unset


    【解决方案1】:
    public function __destruct()
    {
    unset($objname);
    session_destroy();
    }
    

    【讨论】:

      【解决方案2】:

      PHP 在请求结束时关闭 mysql 连接 Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.

      如果您在脚本执行期间多次运行 doSomething - 您可以将 mysql_close 添加到析构函数中

      此外,您可以使用持久连接 (mysql_pconnect),这将为您提供更好的性能

      请注意 - 最好使用 mysqli 扩展名

      【讨论】:

      • 我使用了一个在析构函数中只有一条指令的第三方类: unset($this);所以这意味着mysql链接(我不知道它是如何打开的,在类内)没有关闭对吗?
      • 至少看起来是这样,尝试查看所有文件以找到任何“connect(”子字符串 - 通常它是建立连接的地方
      【解决方案3】:

      我刚刚写了以下,希望对您有所帮助:

      class db {
          public function __construct() {
              $this->conn = mysqli_connection('localhost','user','pass','dbname');
          }
      
          public function mysql_q($sql) {
              $result = mysqli_query($this->conn,$sql);
              return ($result) ? true : false;
          }
      
          public function __destruct() {
              mysqli_close($this->conn);
          }
      }
      
      $db = new db(); // auto call __construct to connect db
      echo ($db->mysql_q($sql)) ? "Successful!" : "Failed!";
      unset($db); // auto call __destruct to close connection
      

      【讨论】:

        猜你喜欢
        • 2011-10-19
        • 1970-01-01
        • 2017-07-18
        • 2011-12-29
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多