首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中启用数据库自动重新连接?

问如何在PHP中启用数据库自动重新连接?
EN

Stack Overflow用户
提问于 2009-06-11 17:20:01
回答 6查看 19.2K关注 0票数 0

数据库为MYSQL

EN

回答 6

Stack Overflow用户

发布于 2012-07-18 14:30:43

有时,当您的MySQL连接打开的时间太长时,当无查询的时间超过my.cnf中的wait_timeout值时,与数据库的连接将被断开。您将收到"MySQL服务器已离开“超时错误。

这是我在代码中实现自动重新连接的方式:

代码语言:javascript
复制
class databaseClass {
    var $conn;
    var $db;

    public function __construct() {
        $this->connect();
    }

    public function connect() {
        $this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);
        $this->db = mysql_select_db(DB_NAME, $this->conn);
    }

    public function disconnect() {
        mysql_close($this->conn);
    }

    public function reconnect() {
        $this->disconnect();
        $this->connect();
    }

    public function queryCompanyExist($company) {
        //auto reconnect if MySQL server has gone away
        if (!mysql_ping($this->conn)) $this->reconnect();

        $query =  "SELECT name FROM company WHERE name='$company'";
        $result = mysql_query($query);
        if (!$result) print mysql_error() . "\r\n";
        return mysql_fetch_assoc($result);
    }
}

有关mysql_ping的更多信息,请参阅此处

票数 8
EN

Stack Overflow用户

发布于 2012-10-08 05:44:08

在C mysql API中:

my_bool重新连接= 0;mysql_options(&mysql,MYSQL_OPT_RECONNECT,& reconnect );请参阅http://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html

在php.ini中的PHP mysqli中设置全局: mysqli.reconnect = On,请参阅http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.reconnect

对于PHP PDO mysql驱动程序,它应该可以通过PDO::setAttribute获得,但是我找不到说明它已经实现的文档。代码似乎试图遵守mysql现在需要的MYSQL_OPT_RECONNECT,但在初始实现(https://bugs.php.net/bug.php?id=58863)中未能做到这一点。58863中的补丁的目的是允许:新的PDO('mysql:host=xxx','xx','xx',array(PDO::MYSQL_OPT_RECONNECT=>true));

发生重新连接的原因是多方面的,但通常是因为池化连接集包含由于缺少使用而超时的成熟连接。默认情况下,mysql连接在8小时后超时。请参阅:http://dev.mysql.com/doc/refman/5.6/en/gone-away.html

有关重新连接的副作用,请参阅:http://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html

票数 5
EN

Stack Overflow用户

发布于 2009-06-11 18:47:23

您可以使用mysql_ping()函数来测试连接的状态,并在它返回false时重新连接。如果您使用的是5.0.13之前的MySQL,mysql_ping()甚至会为您重新连接,就像文档页面中提到的那样;“从MySQL 5.0.13开始,自动重新连接功能被禁用。”

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

https://stackoverflow.com/questions/982442

复制
相关文章

相似问题

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