Php Can';无法连接到数据库,连接太多

Php Can';无法连接到数据库,连接太多,php,mysql,mysqli,Php,Mysql,Mysqli,当我尝试连接到数据库时,出现以下错误 警告:mysqli::mysqli()[mysqli.mysqli]:(HY000/2002):无法连接 通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器 在第8行的/homez.640/connelho/www/uea/includes/database.php中失败 要连接到MySQL:(2002)无法连接到本地MySQL服务器 通过套接字“/var/run/mysqld/mysqld.sock”(2)

当我尝试连接到数据库时,出现以下错误

警告:mysqli::mysqli()[mysqli.mysqli]:(HY000/2002):无法连接 通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器 在第8行的/homez.640/connelho/www/uea/includes/database.php中失败 要连接到MySQL:(2002)无法连接到本地MySQL服务器 通过套接字“/var/run/mysqld/mysqld.sock”(2)

在执行任何SQl查询之前,我始终运行以下connect方法:

public static function connect() {
    require_once("constants.php");
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    if ($mysqli->connect_errno) {
        die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
    }
    return $mysqli;
}
public static function disconnect($mysqli = NULL, $stmt = NULL) {
    if (isset($mysqli)) {
        $mysqli->close();
    }
    if (isset($stmt)) {
        $stmt->close();
    }
}
我总是在任何SQl查询之后运行以下断开连接方法:

public static function connect() {
    require_once("constants.php");
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    if ($mysqli->connect_errno) {
        die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
    }
    return $mysqli;
}
public static function disconnect($mysqli = NULL, $stmt = NULL) {
    if (isset($mysqli)) {
        $mysqli->close();
    }
    if (isset($stmt)) {
        $stmt->close();
    }
}
我已经查看了我的主机提供商,并通过电子邮件发送给他们,他们告诉我检查我的脚本“我们有30个MySQL连接作为一个限制-我们无法调整这一点,如果您的脚本运行正常,没有理由会发生这种情况”。它工作了好几个星期,然后突然停止连接。我是该网站的唯一访问者

有关我的数据库类如何连接和断开连接的示例:

public static function county_select() {
    //connect to database
    $mysqli = Database::connect();

    //write sql statement
    $sql = "SELECT id, county FROM Counties ORDER BY country, county ASC";

    //prepared statement, stage 1: prepare
    if (!($stmt = $mysqli->prepare($sql))) {
        die("Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error);
    }

    //prepared statement, stage 2: execute  
    if (!$stmt->execute()) {
        die("Execute failed: (" . $stmt->errno . ") " . $stmt->error);
    }

    //prepared statement, stage 3: bind result
    if (!$stmt->bind_result($id, $county)) {
        die("Binding result failed: (" . $stmt->errno . ") " . $stmt->error);
    }
    $counties = array();
    //prepared statement, stage 5: fetch    
    while ($stmt->fetch()) {
        $counties[] = array("id" => $id, "county" => $county);
    }
    //disconnect from database
    Database::disconnect($mysqli, $stmt);

    return $counties;
}

我已经有一天没能连接到我的网站了。距离连接过期还有多久?如何手动断开它们的连接?我以为PHP会在请求结束时自动关闭数据库连接,不管怎样?

不要在查询后断开连接!仅在第一次查询时连接到数据库一次。否则,您将尝试进行多次连接

在寻找性能时,始终连接和断开连接不是一个好主意。并且它禁用了某些功能:基本上,您将丢失与现有连接相关的任何内容,例如重新使用准备好的语句,或者在后续查询中访问最后一个\u INSERT\u ID()。为此,保持连接处于活动状态非常重要


但您的问题通常源于滥用持久连接,但我在这里看不到类似的情况。

查询后不要断开连接!仅在第一次查询时连接到数据库一次。否则,您将尝试进行多次连接

在寻找性能时,始终连接和断开连接不是一个好主意。并且它禁用了某些功能:基本上,您将丢失与现有连接相关的任何内容,例如重新使用准备好的语句,或者在后续查询中访问最后一个\u INSERT\u ID()。为此,保持连接处于活动状态非常重要


但你的问题通常源于滥用持久性连接,但我在这里看不到任何类似的情况。

好吧,我一直非常愚蠢。前几天晚上我无法连接到服务器,所以我将连接方法中使用的常量切换到localhost,第二天就忘了。。。难怪我连电话都接不上!多厉害的扳手啊哈哈。我不知道为什么前几天晚上我无法连接,但我现在可以了。很抱歉浪费大家的时间

好吧,我太愚蠢了。前几天晚上我无法连接到服务器,所以我将连接方法中使用的常量切换到localhost,第二天就忘了。。。难怪我连电话都接不上!多厉害的扳手啊哈哈。我不知道为什么前几天晚上我无法连接,但我现在可以了。很抱歉浪费了人们的时间

显示流程列表将显示所有活动连接。然后可以使用
kill
终止任何不需要的连接。
显示进程列表将显示所有活动连接。然后可以使用
kill
终止任何不需要的连接。