使用PHP中的PDO打开和关闭多个数据库连接

时间:2011-09-26 20:18:56

标签: 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 个答案:

答案 0 :(得分:2)

作为per the manual

  

要关闭连接,您需要通过确保来销毁对象   删除所有剩余的引用 - 你这样做   为保存对象的变量赋值NULL。如果你不这样做   明确地说,PHP会自动关闭你的连接   脚本结束。

因此,除非需要/需要一路清理以释放资源,否则可以让连接自行关闭。

持久连接不会在脚本末尾关闭,而是缓存以供将来使用。将此类连接设置为NULL应该将它们关闭。

答案 1 :(得分:0)

PHP会自动关闭脚本末尾的所有打开的连接,因此您应该已经完成​​了。

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