关闭连接时出现Mysql错误

时间:2012-06-29 21:09:22

标签: php mysql

我有这个类用于数据库交互。它工作正常。

<?php require_once('inc/config.inc.php'); ?>
<?php
final class MySQL {
private $link;

public function __construct($hostname, $username, $password, $database) {
    if (!$this->link = mysql_connect($hostname, $username, $password)) {
        //error('Error: Could not make a database link using ' . $username . '@' . $hostname);

    }
    if (!mysql_select_db($database, $this->link)) {
        //error('Error: Could not connect to database ' . $database);
    }
    //echo "open". time();
}

public function __destruct() {
    mysql_close(); // Problem In here
    //echo "closed". time();
}
}

$database=new MySQL(DB_SERVER,DB_USER,DB_PASS,DB_NAME);
?>

但如果我更换     mysql_close(); 同     mysql_close($这 - &GT;链接);

我收到错误:  警告:mysql_close()期望参数1为资源,给定

为null

2 个答案:

答案 0 :(得分:2)

我会使用mysql而不是使用自制的PDO包装器。

如果失败,PHP会自行关闭非持久性数据库连接。它可能会在调用对象析构函数之前执行此操作,从而无需使用该方法。

答案 1 :(得分:2)

此错误的原因非常简单:$ this-&gt; link是一种资源。并且(引用the doc本身)......

  

...自动检测到没有更多引用的资源,   它被垃圾收集器释放。因此,它是   很少需要手动释放内存。

换句话说,在调用__destruct方法之前它已关闭。更重要的是,在mysql_close文档中说:

  

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

顺便说一句,我通常认为__destruct是内部方法(并且很少用它):PHP不是C ++,解放资源的整个概念在这里有很大的不同(通过大量的原因)。如果我需要执行一些清理任务,我通常会使用register_shutdown_function,因为事实证明它更具可预测性。