首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到数据库,连接太多

无法连接到数据库,连接太多
EN

Stack Overflow用户
提问于 2013-02-27 21:58:16
回答 2查看 3.6K关注 0票数 0

当我试图连接到我的数据库时,我会得到以下错误。

警告: mysqli::mysqli() mysqli.mysqli:(HY000/2002):无法通过套接字'/var/run/mysqld/mysqld.sock‘(2)连接到本地MySQL服务器,第8行中的mysqld/mysqld.sock (2)无法连接到MySQL:(2002年)无法通过socket’//run/mysqld.sock连接到本地MySQL服务器(2)

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

代码语言:javascript
复制
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查询之后,我总是运行以下断开连接方法:

代码语言:javascript
复制
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连接作为一个限制--我们不能调整这一点,如果您的脚本运行正常,也没有理由这样做”。它工作了几个星期,然后突然停止了连接。我是这个网站的唯一访问者。

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

代码语言:javascript
复制
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会在请求结束时自动关闭数据库连接呢?

EN

回答 2

Stack Overflow用户

发布于 2013-02-27 23:55:00

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

在寻找性能时,总是连接和断开不是一个很好的主意。它将禁用某些功能:基本上,您将失去与现有连接相关的任何内容,比如重用准备好的语句,或者在后续查询中访问LAST_INSERT_ID()。保持连接活动对此非常重要。

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-03 19:09:02

好吧,我真是太蠢了。前几天晚上我无法连接到服务器,所以我把我在connect方法中使用的常量切换到本地主机,然后第二天忘记了.难怪我联系不上!多好的扳手啊哈哈。不知道为什么那天晚上我不能联系,但我现在可以了。抱歉浪费了人们的时间

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15123276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档