在PHP中使用PDO打开的SQL连接必须closures

当我使用PHP的内置MySQL函数在PHP中打开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()那样显式closures连接? 如果没有,PHP如何知道我什么时候完成连接?

TIA。

使用$link = null让PDO知道它可以closures连接。

PHP:PDO连接和连接pipe理

成功连接到数据库后,PDO类的一个实例将返回到您的脚本。 该连接在该PDO对象的生命周期中保持活动状态。 要closures连接,您需要通过确保所有剩余的引用被删除来销毁对象 – 您可以通过将NULL分配给保存该对象的variables来执行此操作。 如果你没有明确地做到这一点,PHP将在脚本结束时自动closures连接。

PDO本身不提供这样的function。 通过PDO的连接是通过PHP中的PDO对象refcount间接pipe理的。

但是无论如何,无论如何,你都想closures连接。 要么因为你无法控制它,需要它来进行testing或类似的。

您可以通过运行SQL查询来closures与PDOMysql连接 。 每个能够连接到Mysql服务器的用户都能够至lessKILL自己的线程:

 /* * 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语法

相关的Stackoverflow问题:

  • PHP的PDOclosures()? (2012年4月)

当PHP脚本完成执行时,所有的连接都closures。 你也不需要明确地closures与mysql_close()连接。

您也可以限制连接到本地function。 这样一旦function完成,连接就会closures。

那么当PDO的$link被分配一个对象时,PHP会在脚本运行后立即将其设置为null,以便它不再是一个对象。 所以你可以做:

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

http://uk3.php.net/pdo

从我收集的信息来看,我无法看到在php手册中closures它,而且我很快看到的脚本示例从来没有从我所能看到的方面closures连接。