2011-11-30 155 views
0

對於從PHP到MSSQL的數據庫連接,我創建了以下代碼。有人可以建議我,我的代碼中的__destruct()函數自動工作並關閉數據庫連接嗎?以下是我的代碼:來自PHP的MSSQL數據庫連接(sqlsrv_close連接問題)

<?php 
    class db{ 
     private $connection; 
     private $server, $username, $password, $database, $charset; 

     public function __construct($server, $username, $password, $database, $charset){ 
      $this->server = $server; 
      $this->username = $username; 
      $this->password = $password; 
      $this->database = $database; 
      $this->charset = $charset; 

      $connectionInfo = array('UID'=>$this->username, 
            'PWD'=>$this->password, 
            'Database'=>$this->database, 
            'CharacterSet'=>$this->charset); 

      $this->connection = sqlsrv_connect($this->server, $connectionInfo); 

      if ($this->connection === false){ 
       echo '<h2>Unable to connect to database</h2><br/>'; 
       die (print_r(sqlsrv_errors(), true)); 
      }; 
     } 

     public function __destruct(){ 
      sqlsrv_close($this->connection); 
     } 

     public function query($query, $params=null){ 
      $result = sqlsrv_query($this->connection, $query, $params); 

      if (!$result){ 
       echo 'Error in statement execution.\n'; 
       die(print_r(sqlsrv_errors(), true)); 
      } 

      return $result; 
     } 
    } 
+1

是有可能性,析構函數關閉連接時,對象的工作完成 –

+0

我憑什麼把明確的結果在這裏... –

+0

你可以製作一個功能,把密切碼它並在頁面末尾調用該函數... –

回答

1

除非沒有調用__destruct方法,否則您的連接將被關閉。在以下情況下會導致__destruct不執行:

  • 如果「退出」之稱的另一個析構函數
  • 根據PHP版本:如果「退出」之稱的「register_shutdown_function」功能
  • 如果有一個致命的錯誤某處代碼
  • 如果在另一個析構函數拋出異常
  • 如果您嘗試來處理析構函數的異常(PHP> = 5.3.0)

入住這https://stackoverflow.com/a/2385581/603256