【问题标题】:HOW TO FIX User 'user_name' has exceeded the 'max_user_connections' resource (current value: 30)?如何修复用户 'user_name' 已超过 'max_user_connections' 资源(当前值:30)?
【发布时间】:2018-05-21 12:24:45
【问题描述】:
function getDB() {            
    $server_name = "localhost";
    $dbname = "db_name";
    $user_name = "root";
    $password = "12345678";

    $dbConnection = new PDO("mysql:host=$server_name;dbname=$dbname", 
    $user_name, $password); 
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $dbConnection->exec('SET NAMES utf8');

    return $dbConnection;
}

有一些功能

function one(){
    $db = getDB();

    // after some mysql query

    $db = null;
}

function two(){ 
    $db = getDB(); 

    // after some mysql query

    $db = null;
}

有 50 多个函数根据要求调用

【问题讨论】:

  • 完成后关闭与mysql的连接?
  • 您应该提供您使用的代码以及发生此错误的时间的详细信息。否则很难给你解决方案

标签: php mysql


【解决方案1】:

每次您调用函数getDB 时,该函数都会建立与数据库的新连接。这加起来很快。在 99,999% 的用例中,最好重用该连接。实现这一目标的一种方法是使用static variable

function getDB() {   
    static $dbConnection = null; // $dbConnection will be 'remembered', only first time it will be null

    if ($dbConnection === null) {         
        $server_name = "localhost";
        $dbname = "db_name";
        $user_name = "root";
        $password = "12345678";

        $dbConnection = new PDO("mysql:host=$server_name;dbname=$dbname", 
        $user_name, $password); 
        $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $dbConnection->exec('SET NAMES utf8');
    }

    return $dbConnection;
}

【讨论】:

  • 在这种情况下,您的服务器上可能有超过 30 个并发请求,您应该应用 janmyszkier 的第二个建议(也)
【解决方案2】:

有两种可能:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 2017-05-21
    • 2013-07-30
    • 2017-01-02
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多