2014-11-05 74 views
0

我得到这个错误访问被拒绝用户'用户'@'localhost'(使用密码:否) 当我打开第二个mysqli连接在同一个脚本中。两个或多个mysqli连接同时抛出Acces Denied错误

我有一个有2个属性(子类)的类。这两个属性都从DataBase类(它创建一个新的mysqli连接)扩展而来。在这个子语句实例化的那一刻,我得到了这个Access拒绝错误。

有没有办法建立两个mysqli连接或者我的逻辑错了,一个班没有这样的2个子类?

我希望我能解释一下自己。在此先感谢

+2

如果我可能会问,为什么要打开2个mysqli连接?为什么不使用相同的? – 2014-11-05 19:16:19

+0

@thecakei因为这两个子类都从DataBase类扩展而来。在这种情况下,我需要在同一个脚本中同时使用这两个脚本,但还有其他脚本必须独立工作 – Mollo 2014-11-05 19:20:18

回答

0

检查您的max_user_connections您的my.cfg文件。

  • max_user_connections

    允许任何给定的MySQL用户帐户同时连接的最大数目。值为0(默认值)表示“无限制”。

    此变量具有可在服务器启动或运行时设置的全局值。它还具有只读会话值,该值指示适用于与当前会话关联的帐户的有效同时连接限制。会话值初始化如下:

    如果用户帐户的资源限制为非零值MAX_USER_CONNECTIONS,则会话max_user_connections值设置为该限制。

    否则,会话max_user_connections值被设置为全局值。

+0

如果在我的my.cfg文件中,我没有事件是否定义/写入了max_user_connections变量? – Mollo 2014-11-05 19:29:19

+1

这是没有问题的。默认情况下是零,这意味着没有限制。 – jherran 2014-11-05 19:30:48

+0

好吧,这不是问题嘿嘿...感谢您的时间 – Mollo 2014-11-05 19:33:35

1

没有理由我能想到的打开2个连接同一数据库服务器。你应该创建你的连接并将它作为参数传递给你的函数。

$mysqli = new mysqli('localhost', 'username', 'password', 'database'); 

class Foo { 
     /** @var \mysqli */ 
     protected $db; 

     public function __construct(mysqli $mysqli) { 
      $this->db = $mysqli; 
     } 

     public function bar() { 
      $res = $this->db->query('SELECT * FROM table'); 
      $data = array(); 
      while($row = $res->fetch_assoc()) $data[] = $row; 
      return $data; 
     } 
} 

$class = new Foo($mysqli); 
+0

这可以工作,但每次我实例化一个类时都必须传递连接。 – Mollo 2014-11-05 19:36:01

+0

如果是这样的话,你可以创建一个[Singleton](http://stackoverflow.com/q/8776788/2370483) – Machavity 2014-11-05 19:46:57

+0

我有点喜欢你的解决方案,但有一些改变,使得这个$ mysqli全局变量,只是直接通过Database类使用它 – Mollo 2014-11-05 19:58:42