2011-06-03 32 views
1

任何人都可以解释为什么mysql_close()从类析构函数调用失败? mysql_error()报告“连接关闭失败。”php mysql包装类__destruct方法无法关闭数据库

<?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([email protected]_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([email protected]_close($this->link_id)) 
      { 
       $this->DisplayError("Connection close failed."); 
       die(mysql_error()); 
      } 
     } 
    } 
+1

为什么不把它的“@”关掉,让它实际记录问题而不是掩盖它? – dkamins 2011-06-03 00:15:44

+0

'mysql_error()'报告什么? – Phil 2011-06-03 00:16:26

+0

@dkamins我正在使用自定义错误处理程序。 – Kevin 2011-06-03 00:18:00

回答

3

根据bug报告#27903,它显得有些资源是由时间类的析构函数被称为由于脚本执行的结束已经打扫干净了。

在任何情况下,如manual表示...

使用mysql_close()通常是不必要的,因为非持久打开链接在脚本执行结束时自动关闭。