我有以下代码并在Firefox中刷新此网页5次,然后MySQL向我展示了5个连接。根据PDO手册,
永久连接未关闭 在脚本的末尾,但是 另一个脚本缓存并重新使用 请求使用相同的连接 证书。持久连接 缓存允许您避免开销 每个建立一个新的连接 脚本需要与a交谈的时间 数据库,导致更快的网络 应用
我使用了相同的凭据,但MYSQL连接的数量不断增加。即使尝试关闭与$db = null
的连接也无法关闭连接。
我的代码出了什么问题?
<?php
try {
$dbh = new PDO('mysql:host=127.0.0.1;dbname=lingtong', 'root', 'xxxxxx', array(PDO::ATTR_PERSISTENT => true));
foreach ($dbh->query('SELECT * from agent') as $row)
print_r($row);
$dbh = null;
} catch (PDOException $e) {
print "Error! : " . $e->getMessage() . "<br/>";
die();
}
答案 0 :(得分:1)
据我所知,持久连接你可能不需要它:
现在,如果您仍然认为自己确实需要持续性连接,可能需要做更多的研究
答案 1 :(得分:1)
这个问题已经很久了,但如果我做出贡献就可以了。我认为你需要实现一个单例类来处理数据库连接我将在下面编写一个示例类。
<?php
class DB{
//set the connection property to private to prevent direct access
private static $conn;
//now since we dont want to reinstiate the class anytime we need it, lets also set the constructor to private
private function __construct(){}
//now lets create our method for connecting to the database
public static function connect(){
//now lets check if a connection exists already in our $conn property, then we should return it instead of recreating a new connection
if(!empty(self::$conn)){
return self::$conn;
}//end if
//upon reaching here means the $conn property is empty so lets create a new connection
try {
$dbh = new PDO('mysql:host=127.0.0.1;dbname=lingtong', 'root', 'xxxxxx', array(PDO::ATTR_PERSISTENT => true));
//lets now assign the database connection to our $conn property
self::$conn = $dbh;
//return the connection
return $dbh;
} catch (PDOException $e) {
print "Error! : " . $e->getMessage() . "<br/>";
die();
}
}//end method
}//end class
?>
我们的单例类只能创建一个连接并重用它,让我们看看如何使用我们的类
<?php
$dbh = DB::connect();
foreach ($dbh->query('SELECT * from agent') as $row){
print_r($row);
}
?>
答案 2 :(得分:1)
似乎你需要关闭游标并释放(赋值null)到最后一个pdo语句对象以及关闭连接。
此外,了解持久连接的重要之处在于它们仍然存在,但不保证您不会: