[英]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.