php mysql包装器类__destruct方法无法关闭数据库

时间:2011-06-03 00:13:51

标签: php mysql

任何人都可以解释为什么从类析构函数调用时 mysql_close()会失败? mysql_error()报告“连接关闭失败。”

<?php
class Database
{
    private $link_id = 0;
    private $query_id = 0;

    public $error = "";
    public $errorNumber = 0;
    public $affectedRows = 0;

    public function __construct($server, $user, $pass, $database)
    {
        $this->link_id = @mysql_connect($server, $user, $pass, false);

        if (!$this->link_id)
        {
            $this->DisplayError("Could not connect to server: <b>$this->server</b>.");
            die(mysql_error());
        }

        if(!@mysql_select_db($database, $this->link_id))
        {
            $this->DisplayError("Could not open database: <b>$this->database</b>.");
            die(mysql_error());
        }
    }

    public function __destruct()
    {
        if ($this->link_id)
        {
            if(!@mysql_close($this->link_id))
            {
                $this->DisplayError("Connection close failed.");
                die(mysql_error());
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

根据错误报告#27903,似乎由于脚本执行结束而调用时类析构函数已经清理了一些资源。

无论如何,如manual ...

所示
  

通常不需要使用mysql_close(),因为在脚本执行结束时会自动关闭非持久性开放链接。