2016-03-15 51 views
0

我今天收到max_user_connections錯誤。我想知道我是否做錯了什麼。做好多個連接的最佳做法mysqli

我有一個config.php文件與mysqli的連接腳本:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

所以,我需要得到的東西mysqli的網頁包括我的config.php。這裏有一個例子:

使用example.php

<?php 
    include_once("config.php"); 

    $stmt = $mysqli->prepare("select..."); 
    $stmt->execute(); 
    $stmt->bind_result(...,...); 
    while($stmt->fetch()) { 
     ... 
    } 
    $stmt->close(); 
?> 

some html <p> <img>... 

<?php 
    $stmt = $mysqli->prepare("select..."); 
    $stmt->execute(); 
    $stmt->bind_result(...,...); 
    while($stmt->fetch()) { 
     ... 
    } 
    $stmt->close(); 
?> 

some html <p> <img>... 

<?php 
     $stmt = $mysqli->prepare("select..."); 
     $stmt->execute(); 
     $stmt->bind_result(...,...); 
     while($stmt->fetch()) { 
     ... 
     } 
     $stmt->close(); 
?> 

所以,我的問題是:是它做這樣的選擇最好的做法是什麼?我應該在每次選擇後關閉mysqli連接並再次打開?或者在頂部一起選擇,而不是與中間的一些HTML分開?

+1

關於此錯誤消息,您的代碼沒有任何問題。所以這個問題在其他地方 –

+1

它也可能是一個比max_user_connections大量的併發用戶。 – Mihai

+1

這已被封閉作爲http://stackoverflow.com/questions/4079531/mysqli-error-user-already-has-more-than-max-user-connections-active-connectio的副本但是這裏的問題是明確的關於減少連接使用的編碼實踐,而對擬議副本的唯一討論是關於增加配置的限制。 – symcbean

回答

1

最好的做法做選擇這樣嗎?

我討厭它,當人們使用術語「最佳實踐」時,它通常是一個很好的指標,他們不知道他們在說什麼。

你的方法的優點是,其優雅而簡單。但正如你發現的那樣,它不能很好地擴展。

實際上它非常難以測量,但在大多數應用中,MySQL連接是未使用的大部分腳本的生命週期。因此,通過延遲開放連接並儘快關閉它們通常會取得巨大的成功。

前者可以通過裝飾的mysqli類完成,connect方法只是存儲的憑據,而任何一個需要與數據庫對話應該調用包裝的連接方法時,它需要對數據庫的訪問。然而,通常這種方法的效率很低,除非你的代碼創建了大量從不使用的數據庫連接(在這種情況下,更便宜的解決方案是增加連接限制)。

連接被關閉之前最後一個運行的查詢後,可能需要很長的時間。顯式關閉連接解決了這個問題,但需要大量的代碼更改。

不打開和關閉每個查詢的連接。雖然它會導致對databasee連接數量的減少,性能會吸

最大勝利通常來自於優化您的查詢 - 降低併發性和更好的用戶體驗。

+0

在提供Web請求時需要「很長時間」的腳本應該永遠不會運行。 –

+0

謝謝你的回答!一個朋友告訴我創建超過1個mysql用戶,所以每次我在config.php中更改用戶...不知道它是否可以解決這個問題... –

+0

更改用戶名不會有任何影響連接數量,也不限制 - 它是一個絕對限制,而不是每個用戶的限制。這對於AB測試非常有用,並確保您完全從現有的自動連接模型中遷移出來。 – symcbean