Открытие и закрытие нескольких соединений с базой данных с помощью PDO в PHP - PullRequest
1 голос
/ 27 сентября 2011

Я работаю над простым классом подключения к базе данных. Я использую 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 ]

2 голосов
/ 27 сентября 2011

Как согласно инструкции :

Чтобы закрыть соединение, вам необходимо уничтожить объект, убедившись, что все оставшиеся ссылки на него удалены - вы делаете это с помощьюприсваивание NULL переменной, которая содержит объект.Если вы не сделаете этого явно, PHP автоматически закроет соединение, когда ваш скрипт завершится.

Так что, если вы не хотите / не хотите очистить путь, чтобы освободить ресурсы, вы можете оставитьСоединения закрываются сами.

Постоянные соединения не закрываются в конце скрипта, но кэшируются для будущего использования.Установка таких соединений в NULL должна закрыть их.

0 голосов
/ 27 сентября 2011

PHP автоматически закрывает все открытые соединения в конце скрипта, поэтому то, что вы хотите сделать, уже должно быть сделано.

Однако если вам нужно закрыть соединения до конца выполнения скриптавам нужно будет зациклить массив пулов соединений и по отдельности закрыть соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...