Нужно ли закрывать SQL-соединения, открытые с PDO в PHP



когда я открываю соединение MySQL в PHP с помощью только встроенных функций MySQL PHP, я делаю следующее:



$link = mysql_connect($servername, $username, $password);
mysql_select_db($dbname);
//queries etcetera
mysql_close($link);


когда я открываю соединение с PDO, это выглядит так:



$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);
//prepare statements, perform queries


Я должен явно закрыть соединение, как я делаю с mysql_connect() и mysql_close()? Если нет, то как PHP узнает, когда я закончу с моим соединением?



ТИА.

779   6  

6 ответов:

использовать $link = null чтобы PDO знал, что он может закрыть соединение.

PHP: PDO Connections & Connection Management

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

PDO не предлагает такую функцию самостоятельно. Соединения через PDO косвенно управляются с помощью объекта PDO refcount в PHP.

но иногда вы хотите закрыть соединение в любом случае, независимо от refcount. Либо потому, что вы не можете контролировать его, нужен он для целей тестирования или тому подобное.

вы можете закрыть Mysql соединение с PDO запустив SQL-запрос. Каждый пользователь, который может подключиться к серверу Mysql является в состоянии KILL по крайней мере, его собственный поток:

/*
 * Close Mysql Connection (PDO)
 */

$pdo_mysql_close = function (PDO $connection) {

    $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1);
    $list  = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC);
    foreach ($list as $thread) {
        if ($thread['Info'] === $query) {
            return $connection->query('KILL ' . $thread['Id']);
        }
    }
    return false;
};

$pdo_mysql_close($conn);

Связанная Документация Mysql:

Связанные Вопросы Stackoverflow:

когда PHP скрипт завершает выполнение, все соединения закрываются. Также вам не нужно явно закрывать соединение с mysql_close().

вы также можете ограничить свои соединения в пределах локальных функций. Таким образом, соединение будет закрыто, как только функция будет завершена.

хорошо видя как $link для PDO назначается объект, PHP установит это как null, как только скрипт запустится, чтобы он больше не был объектом. Поэтому вы могли бы просто сделать:

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);

//prepare statements, perform queries

$link = null;

http://uk3.php.net/pdo

из того, что я собираю, я все равно не мог увидеть, чтобы закрыть его в руководстве php, и примеры скриптов, которые я быстро посмотрел, никогда не закрывали соединение в любом случае из того, что я мог видеть.

Comments

    Ничего не найдено.