我的PDO连接有问题! 我读到我不想关闭PDO连接因为会自动关闭! 但如果你想手动关闭它,我需要将Null分配给连接变量。 但我使用数据库类,数据库查询就像这样运行!
$addUser = users::getInstance()->userAdd($data);
和users类包含以下内容
class users extends DB {
private static $_instance = null;
public static function getInstance(){
if (!isset(self::$_instance)){
self::$_instance = new users();
}
return self::$_instance;
}
[...]
}
和数据库类
class DB {
private static $_instance = null;
private $_con;
[...]
public function __construct(){
try{
$this->_con = new PDO('mysql:host=localhost';dbname=db,user,pass);
}catch(PDOException $e){
die ($e->getMessage());
}
}
public function __destruct (){
$this->close();
}
public static function getInstance(){
if (!isset(self::$_instance)){
self::$_instance = new DB();
}
return self::$_instance;
}
public function close(){
$this->_con = null;
}
[...] }
问题是脚本没有关闭连接,因为当我限制我的localhost中的最大用户连接或使用已经限制它的免费虚拟主机服务时,我收到此错误消息
SQLSTATE[HY000] [1203] User 'userName' already has more than 'max_user_connections' active connections
我需要一个解决方案,以便在我使用实例方法建立连接时关闭连接来避免此错误消息!
答案 0 :(得分:3)
所以它是:
$pdo = new PDO('mysql:host=localhost;dbname=db','user','pass');
$user = new users($pdo);
$user->select();
class users
{
protected $db;
function __construct($pdo){
$this->db = $pdo;
}
function select()
{
$this->db->query("select 1");
}
}
这样,每个脚本实例只会创建一个连接,并且您再也不会遇到这样的错误。
答案 1 :(得分:0)
我要离开这里,提醒我在发布“不太有用”的答案之前先思考一下。 ; - /
请使用“您的常识”提供的答案与全局,重复使用的连接。
不要再读了......
停止扔掉未使用过的连接!让他们活跃!
完成“连接”后,将其返回到“空闲列表”数组。不要破坏它
1)当您想要新的数据库连接时,请检查“空闲列表”。如果可用的话,抓住最顶层的。
2)如果没有免费的可用,请创建一个并使用它。
3)完成后将其放入免费列表。不要关闭它!
将“免费列表”实现为“堆栈”。我还保留了一份“活动连接列表”。当一个人完成后,将其返回到“免费列表”。
这很有用
您可能会用尽“数据库句柄”,但您需要十个活动的重叠活动事务。