Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDO MySQL Connection close - unset vs null

Tags:

php

pdo

I've read in PDO manual that to close connection you should use the following:

$connection = null;

However, Some people suggested that since PHP 5.3 has a new GC, the following should be used:

unset($connection);

I need to know once and for all, which one is preferred, or are they the same?

like image 341
Jacob Cohen Avatar asked May 12 '14 16:05

Jacob Cohen


2 Answers

I stumbled with this. I have a PDO object that spans setup and teardown, and I can't find where there must be a remaining reference, as setting $pdo to null did not resolve the problem.

User Contributed Notes in http://php.net/manual/en/pdo.connections.php discusses the problem of delayed closure. Here they suggest killing the current connection:

$pdo->query('SELECT pg_terminate_backend(pg_backend_pid());'); $pdo = null;

This is for postgres. For mysql I have used:

$pdo->query('KILL CONNECTION CONNECTION_ID();');

like image 38
user3369864 Avatar answered Oct 09 '22 12:10

user3369864


They do the same thing. Unsetting the $pdo handle and setting it null both close the connection.

You can test this for yourself. Run the following script in one window, and in a second window open the MySQL client and run SHOW PROCESSLIST every couple of seconds to see when the connection disappears.

<?php

$pdo = new PDO(..);
sleep(10);
unset($pdo);
echo "pdo unset!\n";
sleep(10);

Then change unset($pdo) to $pdo=null; and run the test again.

<?php

$pdo = new PDO(..);
sleep(10);
$pdo = null;
echo "pdo set null!\n";
sleep(10);

The extra sleep() at the end is there to give you a moment to see that the connection has dropped, before the PHP script terminates (which would drop the connection anyway).

like image 164
Bill Karwin Avatar answered Oct 09 '22 14:10

Bill Karwin