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

后端 未结 6 1494
野的像风
野的像风 2020-11-28 07:36

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)         


        
6条回答
  •  爱一瞬间的悲伤
    2020-11-28 07:59

    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:

    • 13.7.5.30. SHOW PROCESSLIST Syntax
    • 13.7.6.4. KILL Syntax

    Related Stackoverflow Questions:

    • PHP PDO close()? (Apr 2012)

提交回复
热议问题