php - 无法连接到数据库,连接太多

标签 php mysql mysqli

<分区>

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

Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /homez.640/connelho/www/uea/includes/database.php on line 8 Failed to connect to MySQL: (2002) Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

在执行任何 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;
}

我总是在任何 SQl 查询后运行以下断开连接方法:

public static function disconnect($mysqli = NULL, $stmt = NULL) {
    if (isset($mysqli)) {
        $mysqli->close();
    }
    if (isset($stmt)) {
        $stmt->close();
    }
}

我看过https://stackoverflow.com/a/2499660并通过电子邮件发送给我的托管服务提供商,他们告诉我检查我的脚本“我们有 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 会以任何方式在请求结束时自动关闭数据库连接?

最佳答案

查询后不要断开连接!仅在第一次查询发生时连接到数据库一次。否则,您将尝试连接超过必要的次数,这不止一次。

在寻找性能时,始终连接和断开连接并不是一个好主意。并且它禁用了某些功能:基本上你会丢失与现有连接相关的任何东西,比如重新使用准备好的语句,或者在后续查询中访问 LAST_INSERT_ID() 。保持连接活跃对此很重要。

但是你的问题通常源于滥用持久连接,但我在这里看不到这样的东西。

关于php - 无法连接到数据库,连接太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15123276/

相关文章:

PHP - 将 foreach 转换为数组

php - 哪个是最好的 COMET 服务器?

php - 在第二个查询的值中使用第一个查询的值

php - 当我打印多维数组时,数组堆叠起来

php - 在 PHP 中显示 "No Results Found"

javascript - 从文本区域内的文本中删除空格

php - 从谷歌地图获取城市状态

php - MySQL不按日期排序

mysql - 如何通过多个 JOIN 提高查询性能

mysql - 如何按顶级父类别获取所有项目?