0

所以我正在处理很多类......在我将会话类(验证和创建/销毁会话)包含到我的用户类(用户操作、登录、注册等)中之前,一切都运行良好。

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

__用户类的构造:

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

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

__construct 类会话:

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

因此,您会看到它们是如何相互包含的,我认为这就是导致我的连接错误的原因。

4

4 回答 4

1

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

相反,在构造函数中请求数据库连接。

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

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

于 2013-04-08T19:53:14.813 回答
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;
...
}
于 2013-04-08T19:52:31.967 回答
0

在会话类

$this->db = $db;

在您的用户类中

$this->session = new Session($this->db);
于 2013-04-08T19:49:37.750 回答
0

如果您创建一个包含两个类的第三个类并在第三个类上运行循环?然后在 UserSession 上运行所有数据库实例?我不知道?

__用户类的构造:

 $this->password = new Password();

__construct 类会话:

$this->error = new Error();

__UserSession 类的构造:

$this->db = new DB($db);
$this->users = new User($db);
$this->users = new Session($db);
于 2013-04-08T19:55:27.487 回答