2016-07-15 54 views
1

我知道我們總是必須在最後關閉db連接。讓我們有一個類,有四個方法,每個方法都由db查詢組成。現在我的問題是在哪裏創建和關閉數據庫連接?

我應該創建一個連接並關閉它在每個不同的方法 或在類的構造函數中創建連接?如果我在構造函數中創建了 連接,那麼我將在哪裏關閉它。因爲 如果我在任何函數中關閉它,沒有其他方法可以訪問它。

如果我爲每種方法創建新的連接,則沒有連接可能會非常高。然後我將在哪裏創建和關閉功能的正確方法?

+1

代替手動管理數據庫連接,可以考慮使用[數據庫連接池(http://stackoverflow.com/questions/4041114/what-is-database-pooling)。 – azurefrog

+0

使用析構函數。 – Mickey

回答

0

由於php的引用計數系統沒有必要關閉連接,它會自動釋放(除非你打開持久數據庫鏈接),所以它不應該引起頭痛。

你應該只打開一次連接一次。

1

如果你打開它,那麼你需要關閉它。

只要關閉連接,就可以將其關閉。看起來你的結局可能更多的是關於程序設計的過程。僅僅因爲數據庫調用使用連接並不意味着它必須在那裏打開和關閉。

假設您可能想要重用持有連接的$ mysqli變量。您可以將該連接傳遞給一個函數,並將其返回或關閉。通過這種方式,您可以在函數主體中隔離數據庫調用的主要活動,而無需擔心太多的開啓和關閉所有內容。

使用該技術,可以重複使用多個查詢的連接,每個查詢都包含它們各自的方法。如果需要的話,也許你會更好地打開一個類並傳遞一個$ mysqli連接。

這取決於您的計劃和您的選擇如何工作。

如果您正在開發一個程序,並且您對打開和關閉操作的影響感到好奇,則可以撥打http://php.net/manual/en/mysqli.stat.php或類似的功能。如果你打開很多線程而不關閉它們,那麼你會在mysqli_stat()的回答中看到線程數量增加。

例如,如果您設計的設計較差的查詢遠離您,調用可能無法關閉;連接對象的範圍應該與腳本的結尾自然關閉。

0

請考慮交易概念。舉例來說,如果你的方法是按順序調用的,打開一個連接並保持打開是合理的 如果其他方法的調用有延遲,我不會建議你保持連接暫停,特別是如果有多個人打算訪問應用程序

0

最好的方法是將implement classesextend它到你的functional class包含methodsConstructor的擴展類可以通過call toconnection函數和析構函數在對象設置爲NULL時調用斷開連接。

或者

至於你的問題的狀態,在基類中兩個功能有建築等具有破壞。 在使用連接之前調用構造函數,並在使用後將其銷燬。 實施例將是:

class bar{ 
    protected function connect(){ 
    #connect to db 
    } 
    protected function disconnect(){ 
    #disconnect db 
    } 

    class foo extends bar{ 

    function func1() { 
    $this->connect(); 
    #Code 
    $this->disconnect(); 
    } 

    function func2() { 
    $this->connect(); 
    #Code 
    $this->disconnect(); 
    } 

    function func3() { 
    $this->connect(); 
    #Code 
    $this->disconnect(); 
    } 

    function func4() { 
    $this->connect(); 
    #Code 
    $this->disconnect(); 
    } 
?> 
相關問題