2011-09-26 63 views
1

我正在研究簡單的數據庫連接類。我正在使用PHP和PDO。在PHP中使用PDO打開和關閉多個數據庫連接

因爲我需要連接到多個數據庫,所以我想將所有數據庫連接集中到一個類變量中,然後按照腳本的要求訪問它們。

下面是一些僞代碼:

class Database_Driver 
{ 
    private static $db_connect_pool; 

    public static function openConnect($params_arr) 
    { 
     try 
     { 
      $db_driver_str = $params_arr['driver']; 
      $db_host_str = $params_arr['host']; 
      $db_name_str = $params_arr['db_name']; 
      $db_username_str = $params_arr['db_username']; 
      $db_password_str = $params_arr['db_password']; 

      $connect_options_arr = array(PDO::ATTR_PERSISTENT => true); 

      self::$db_connect_pool[''.$db_driver_str.'_'.$db_name_str.''] = new PDO("".$db_driver_str.":host=".$db_host_str.";db_name=".$db_name_str."", $db_username_str, $db_password_str, $connect_options_arr);     
     }   
     catch (Exception $e) 
     { 
      print_r($e); 
     } 
    } 

    public static getConnection($db_driver, $db_name) 
    { 
     return self::$db_connect_pool[''.$db_driver.''.$db_name.'']; 
    } 
} 

Database_Driver::openConnect($params_str); 
$db_handle = Database_Driver::getConnection($db_driver, $db_name); 
$st_handle = $db_handle->prepare('SQL Statement'); 
$st_handle->execute(); 

因此,在我想關閉所有打開的數據庫連接我的劇本的結尾。我怎樣才能做到這一點?我是否只需要取消該陣列即self::$db_connect_pool = NULL;或者是否有其他方法可以有效地執行此操作。

在此先感謝。

回答

2

由於per the manual

要關閉連接,你需要確保 ,爲所有剩餘引用被刪除銷燬對象 - 您可以通過 這樣做是爲了保持該變量賦值NULL目的。如果您明確不這樣做 ,那麼當您的 腳本結束時,PHP將自動關閉連接。

因此,除非想要/需要清理沿途釋放資源,否則可以讓連接自行關閉。

持久連接在腳本結束時沒有關閉,但被緩存以供將來使用。將這種連接設置爲NULL應該關閉它們。

+0

感謝您的信息。這是否也適用於持續連接? –

+0

@Chuck Ugwuh:我已經更新了我的回答 – Cez

+0

非常感謝。現在更清楚了。 –

0

PHP會自動關閉腳本末尾的所有打開的連接,因此您應該已經完成​​了想要做的事情。

但是,如果您需要在腳本執行結束前關閉連接,則需要循環連接池數組並單獨關閉連接。