2011-06-09 38 views
2

我正在使用析構函數關閉數據庫連接。PHP不能mysql_close(),因爲資源爲空?

function __destruct(){ 
     var_dump($this->dblink); 
     mysql_close($this->dblink); 
    } 

變種轉儲給我

resource(7) of type (mysql link) NULL 

和mysql_close()給我:

Warning: mysql_close() expects parameter 1 to be resource, null given  

有什麼想法?

編輯 感謝我的回覆,我找到了問題。被另一個父類調用。現在對我來說很明顯。

THANKS

+1

也許var_dump在被轉儲時與變量相混淆?我還注意到,你得到了兩個var_dump消息(一個表示資源,一個表示空值)。也許實際上有兩個對象在你的代碼中調用'__destruct()',在這種情況下,你正在接收的消息之間沒有斷開。一個對象具有有效的數據庫鏈接。第二個對象的數據庫鏈接應該是null,並且還會引發警告。 – Kzqai 2011-06-09 14:18:37

+0

是__destruct調用太遲了?嘗試取消設置變量,如果你只是依靠腳本終止來調用它。 – Geoffrey 2011-06-09 14:19:26

+0

@ Tchalvak感謝您的迴應。其實我把vdump放進去了,因爲我試圖弄清楚爲什麼我會收到警告。 – asdfasdf 2011-06-09 14:19:29

回答

2

當腳本完成該對象被自動破壞。資源也被釋放。如果資源在對象被破壞之前被釋放,則無法關閉它。因此,只有在腳本終止之前需要關閉連接時才能關閉它。當腳本已經完成時關閉它是沒有用的。所有資源都會自動關閉並清理。

+0

謝謝,幫助。 – asdfasdf 2011-06-09 14:27:13

+1

這樣做很乾淨。它減少了遺忘和泄漏資源的風險。它促進了整潔的節目和整體健康的生活方式!在儘可能短的時間內保持與數據庫服務器的連接也是一個好主意:記住,這不僅僅是您應該考慮的PHP資源! – 2011-06-09 14:30:34

+0

清理未使用的資源確實是一個好主意,但是您需要記住PHP也會這樣做。在這種情況下,您可以添加額外的檢查來查看資源是否已經被釋放,或者您可以添加一個單獨的'disconnect'方法來在您不再需要時釋放資源。無論哪種情況,您都應該小心,不要釋放已被PHP釋放的東西。 – GolezTrol 2011-06-09 14:35:06

0

首先對象必須被銷燬和明年騰出資源來爲空...那麼你不會有問題

< < mysql_close()預計參數1是資源>>

和你如果對象已經結束,無法關閉連接!

相關問題