在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与PDO的Mysql连接 。 每个能够连接到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;
从我收集的信息来看,我无法看到在php手册中closures它,而且我很快看到的脚本示例从来没有从我所能看到的方面closures连接。