我有几乎所有类都在扩展的db
类:
class db {
protected $db;
public function __construct() {
$this->connect();
}
protected function connect() {
$this->db = new MySQLi(db_host, db_user, db_pass, db_name) or die($this->db->error); (line 22)
$this->db->set_charset('utf8');
}
}
这是页面类
class page extends db {
var $common;
public function __construct() {
parent::__construct();
$this->common = new common();
和
class common extends db {
public function __construct() {
parent::__construct();
}
我正在
警告:mysqli :: mysqli()[mysqli.mysqli] :( 42000/1203):用户管理员 已经有超过'max_user_connections'的活动连接 第22行/home/tural/public_html/incl/classes/class.db.php
如何解决此问题?
答案 0 :(得分:4)
从实例化的db
继承的每个类都会建立一个新的数据库连接。您应该只有一个数据库类实例。所有page
和common
都不需要从中继承,只需传递db
个实例。
答案 1 :(得分:0)
扩展db类时,每次生成实例后都会建立一个mysqli连接。我认为如果将类db定义为singleton
会更好代码如下;
class db {
private static $_db; // db instance
protected $connection;
private function __construct() {
$this->connection = new MySQLi(db_host, db_user, db_pass, db_name) or die($this->connection->error);
$this->connection->set_charset('utf8');
}
public function get_instance()
{
if( isset( self::$_db) )
{
return self::$_db;
}
else
{
self::$_db = new db();
}
return self::$_db;
}
}
通过这种方式,您只能创建1个mysql连接。
您可以通过db::get_instance()->do_something();
普通类可以是这样的;
class page {
var $common;
var $db;
public function __construct() {
parent::__construct();
$this->db = db::get_instance();
$this->common = new common();
}
}
我认为这是更好的设计。