繁体   English   中英

关闭连接时出现Mysql错误

[英]Mysql error in closing the connection

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

<?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($ this-> link);

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

我会使用PDO ,而不是使用自己开发的mysql包装器。

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

出现此错误的原因非常简单:$ this-> link是一种资源。 并且(引用文档本身)......

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM