类循环创建了太多连接的mysql

时间:2013-04-08 19:44:50

标签: php mysql oop class mysqli

所以我正在使用很多类......一切正常,直到我将会话类(验证和创建/销毁会话)包含到我的用户类中(用户操作,登录,注册等)。 / p>

基本上,我得到了一个“mysqli太多连接!”错误...我认为这是因为我的会话类包含在用户类中,反之亦然:

__类用户构造:

$this->db = new DB($db);
$this->password = new Password();
$this->session = new Session($db);

$ db只是一个数据库信息数组...

__类Session的构造:

 $this->error = new Error();
 $this->users = new User($db);
 $this->db = new DB($db);

所以你看他们两人是如何相互包容的,我认为这是导致我的连接错误的原因。

4 个答案:

答案 0 :(得分:1)

您必须先创建一个,然后将其传递给另一个的构造函数。

像:

会话:

__construct($db){
  $this->db = $db; //Don't reconstruct
  $this->users = new User($db,$this);
  ...
}

用户:

__construct($db,$session){
...
  $this->db = $db; //Don't re-construct
  $this->session = $session;
...
}

答案 1 :(得分:1)

创建数据库连接不是用户的工作。 (当你想到它时,它没有多大意义,是吗?)

而是询问以获取构造函数中的数据库连接。

class User {
    public function __construct(DB $db) {

这样,您可以在整个应用程序中重用连接对象。

答案 2 :(得分:0)

在会话类

$this->db = $db;

并在您的用户类

$this->session = new Session($this->db);

答案 3 :(得分:0)

如果你创建了一个用这两个类构造并在第3类上运行循环的第三个类?然后在UserSession上运行所有数据库实例?我不知道?

__类用户构造:

 $this->password = new Password();

__类Session的构造:

$this->error = new Error();

__ UserSession类的构造:

$this->db = new DB($db);
$this->users = new User($db);
$this->users = new Session($db);