2014-06-23 30 views
0

我有一個很大的程序風格的php/mysql網站,它被分成許多不同的文件。在每個文件中,我包含了我的dbconn.php,以確保數據庫連接可用。PHP阻止多個MySQL連接

它看起來是喜歡這樣的:

的index.php

<?php 
    include_once ('header.php'); 
    include_once ('nav.php'); 
    include_once ('content.php'); 
    include_once ('sidebar.php'); 
    include_once ('footer.php'); 
?> 

並在每個文件我通過include_once調用其他幾個文件。所以我總共拿出了大約30個不同的文件。

每個文件的開頭爲:

include_once($_SERVER['DOCUMENT_ROOT'].'/dbconn.php'); 

由於我使用include_once,dbconn.php不宜多裝那麼一次,但最近我得到以下PHP警告。

PHP Warning: mysqli_connect(): (HY000/1226): User 'username' has exceeded the 'max_user_connections' resource (current value: 20) in /var/www/html/dbconn.php on line 10 

我dbconn.php看起來是這樣的:

<?php 
    $host = "localhost"; 
    $user = "username"; 
    $pass = "password"; 
    $db = "dbname"; 

    if(!mysqli_thread_id($con)){ 
     $con = mysqli_connect($host, $user, $pass, $db); 
     mysqli_set_charset($con, 'utf8'); 
    } 
    unset($host,$user,$pass,$db); 
?> 

所以就有了雙重檢查。 如果已經有一個打開的mysql連接,該文件應該基本不做任何事情。

我到底做錯了什麼? 爲什麼我得到這個PHP警告,我如何減少mysql連接的數量?

+0

http://stackoverflow.com/questions/9389201/max-user-connections-set-to-200-still-getting-error看看這個帖子..可能已經被解決了 – DWolf

+0

你也可以考慮單例模式來處理數據庫連接。 – Sugar

+0

@D狼:我正在爲3號場景苦苦掙扎,但我還能做些什麼嗎?我有這樣的感覺,我負責連接數量巨大 – user3614800

回答

0

基本上,這不是導致問題的單個頁面的不同呼叫。事實上,您目前有多個OPEN連接。

確保你在他們達到目的後關閉你的連接。

此外,請儘量避免您當前擁有的結構類型,將所有與數據庫相關的內容包含在一個文件中,然後在您的頁面上只包含一次。

+0

這裏:http://stackoverflow.com/questions/2876412/php-and-mysqli-close 他們說,mysqli_close是沒有必要的... 如果我決定手動關閉連接...什麼時候可以做到這一點?我與這個人有同樣的問題:http://stackoverflow.com/questions/21389816/a-proper-way-to-open-and-close-mysqli-queries – user3614800

+0

嘗試使用一種方法,您可以解除所有相關查詢然後一次關閉連接。 –

+0

在〜30個文件中,我使用了許多SELECT查詢...我不明白我應該如何將它合併到一個文件中... – user3614800