2014-11-05 53 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