Do SQL connections opened with PDO in PHP have to be closed

PhpSqlMysqlPdo

Php Problem Overview


When I open a MySQL connection in PHP with just PHP's built-in MySQL functions, I do the following:

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

When I open a connection with PDO, it looks like this:

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

Do I have to explicitly close the connection like I do with mysql_connect() and mysql_close()? If not, how does PHP know when I'm done with my connection?

TIA.

Php Solutions


Solution 1 - Php

Use $link = null to let PDO know it can close the connection.

PHP: PDO Connections & Connection Management

> Upon successful connection to the database, an instance of the PDO class is returned to your script. The connection remains active for the lifetime of that PDO object. To close the connection, you need to destroy the object by ensuring that all remaining references to it are deleted--you do this by assigning NULL to the variable that holds the object. If you don't do this explicitly, PHP will automatically close the connection when your script ends.

Solution 2 - Php

PDO does not offer such a function on its own. Connections via PDO are indirectly managed via the PDO objects refcount in PHP.

But sometimes you want to close the connection anyway, regardless of the refcount. Either because you can not control it, need it for testing purposes or similar.

You can close the Mysql connection with PDO by running a SQL query. Every user that is able to connect to the Mysql server is able to KILL at least its own thread:

/*
 * 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);

Related Mysql Documentation:

Related Stackoverflow Questions:

Solution 3 - Php

When the PHP script finishes executing, all connections are closed. Also you don't have to explicitly close your connection with mysql_close().

Solution 4 - Php

You can also limit your connections to within local functions. That way the connection is closed as soon as the function is completed.

Solution 5 - Php

Well seeing as the $link for the PDO is assigned an object, PHP would set that as null as soon as the script runs so that it's no longer an object. Therefore you could just do:

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

//prepare statements, perform queries

$link = null;

Solution 6 - Php

http://uk3.php.net/pdo

From what i gather i could not see anyway to close it in the php manual, and examples of scripts i quickly looked at never closed the connection in anyway from what i could see.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbenjyView Question on Stackoverflow
Solution 1 - PhpDreadPirateShawnView Answer on Stackoverflow
Solution 2 - PhphakreView Answer on Stackoverflow
Solution 3 - PhpVexatusView Answer on Stackoverflow
Solution 4 - PhpJDelageView Answer on Stackoverflow
Solution 5 - PhpRob HollandView Answer on Stackoverflow
Solution 6 - PhppjauView Answer on Stackoverflow