当我使用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()
一样明确关闭连接?如果没有,PHP如何知道我何时完成连接?
TIA。
答案 0 :(得分:76)
使用$link = null
让PDO知道它可以关闭连接。
PHP: PDO Connections & Connection Management
成功连接到数据库后,PDO类的实例将返回到您的脚本。该连接在该PDO对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁对象 - 您可以通过为保存对象的变量赋值来执行此操作。如果您没有明确地执行此操作,PHP将在脚本结束时自动关闭连接。
答案 1 :(得分:13)
PDO本身不提供这样的功能。通过PDO的连接通过PHP中的PDO对象引用来间接管理。
但有时你想要关闭连接,无论引用计数如何。要么是因为你无法控制它,需要它用于测试目的或类似。
您可以通过运行SQL查询来关闭 Mysql 与PDO的连接。每个能够连接到Mysql服务器的用户都能KILL
至少有自己的线程:
/*
* 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文档:
相关Stackoverflow问题:
答案 2 :(得分:11)
当PHP脚本完成执行时,所有连接都将关闭。您也不必明确关闭与mysql_close()
的连接。
答案 3 :(得分:5)
您还可以将连接限制在本地功能中。这样一旦功能完成,连接就会关闭。
答案 4 :(得分:1)
很好地看到PDO的$link
被分配了一个对象,PHP会在脚本运行时将其设置为null,这样它就不再是一个对象了。因此你可以这样做:
$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);
//prepare statements, perform queries
$link = null;
答案 5 :(得分:0)
从我收集的内容中我无法看到在php手册中关闭它,我快速查看的脚本示例从未以我能看到的方式关闭连接。