簡體   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