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

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

$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 знает, когда я закончил с моим соединением?

ТИА.

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

PHP: подключения и управление PDO

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

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

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

Вы можете закрыть соединение 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:

  • 13.7.5.30. Синтаксис SHOW PROCESSLIST
  • 13.7.6.4. Синтаксис KILL

Связанные вопросы о стеке:

  • PHP PDO close ()? (Апрель 2012)

Когда скрипт 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, и примеры сценариев, которые я быстро посмотрел, никогда не закрывали соединение, в любом случае, из того, что я мог видеть.