2011-09-26 129 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会自动关闭脚本末尾的所有打开的连接,因此您应该已经完成​​了想要做的事情。

但是,如果您需要在脚本执行结束前关闭连接,则需要循环连接池数组并单独关闭连接。

相关问题