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

如何在PHP中启用数据库自动重新连接?,php,mysql,Php,Mysql,数据库是MYSQL您可以编写一个函数,通过连接ping数据库,万一数据库关闭,重新连接数据库,然后继续查询或执行任何您想要的操作,还可以查看php库,它对您很有用 另外,为了维护数据库连接,在创建数据库连接后,它将连接到数据库,然后您可以实现名为getConnection的方法,该方法每次都将执行我上面描述的检查 PPS。您可以使用异常,尝试查询,每当异常捕获失败时,重新连接并重试。您可以使用该函数测试连接的状态,并在连接返回false时重新连接。如果您使用的是5.0.13之前版本的mysql,

数据库是MYSQL

您可以编写一个函数,通过连接ping数据库,万一数据库关闭,重新连接数据库,然后继续查询或执行任何您想要的操作,还可以查看php库,它对您很有用

另外,为了维护数据库连接,在创建数据库连接后,它将连接到数据库,然后您可以实现名为getConnection的方法,该方法每次都将执行我上面描述的检查


PPS。您可以使用异常,尝试查询,每当异常捕获失败时,重新连接并重试。

您可以使用该函数测试连接的状态,并在连接返回false时重新连接。如果您使用的是5.0.13之前版本的mysql,mysql_ping甚至会为您重新连接,如文档页面所述;自MySQL 5.0.13以来,自动重新连接功能被禁用。

您应该检查查询是否仍然失败。通过检查错误代码,您可以判断它是否因为没有连接而失败,然后重新连接。只需确保跟踪重新连接的尝试,以免陷入循环。

为什么首先需要重新连接?您是如何/为什么断开连接的?在PHP中,在脚本开始时连接,在脚本结束时连接自动关闭

根本不需要在脚本中调用mysql\u close,如果显式关闭连接,自动重新连接将是愚蠢的


你可以试试,这就是你要找的。然后,连接将永久保持打开状态,其他连接脚本可以使用该连接。

有时,当MySQL连接打开的时间过长时,如果没有查询的时间超过my.cnf中的等待超时值,则与数据库的连接将断开。您将得到MySQL服务器已经消失的超时错误

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

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);
    }
}
有关C mysql API的更多信息,请参阅此处:

我的布尔值=0; mysql\u options&mysql,mysql\u OPT\u RECONNECT,&RECONNECT; 看

从PHP.ini中的PHP mysqli设置全局: mysqli.reconnect=On 看

对于PHP PDO mysql驱动程序,它应该可以通过PDO::setAttribute获得,但我找不到表明它已实现的文档。代码似乎试图尊重MYSQL现在需要的MYSQL_OPT_重新连接,但在最初的实现中没有做到这一点https://bugs.php.net/bug.php?id=58863. 58863中的补丁旨在允许: 新的PDO'mysql:host=xxx','xx','xx',arrayPDO::mysql\u OPT\u RECONNECT=>true

发生重新连接的原因是多方面的,但通常是因为连接池包含一个成熟的连接,该连接由于缺少使用而超时。默认情况下,mysql连接在8小时后超时。见:


有关重新连接的副作用,请参见:

您能更具体一点吗?您使用什么连接到数据库、mysql扩展、mysqli或抽象层?你收到了什么样的错误信息,等等?@ruquay,实际上问题很具体。无论您使用的是mysqli还是较旧的mysqli。表明你不明白这意味着什么。这个问题与@Pacerier一样具体,感谢您提供手册链接。我对你渊博的知识感到十分惊讶。你评论的语气也表明你理解什么是基本的人类尊严。我真的很敬畏。这样会很慢,是吗?什么会慢?每次都要检查连接吗?您必须做一些权衡,更重要的是连接保证或数据安全。我想指出的是,为了确保您仍然有任何连接,您需要在每次开始更新之前进行检查。即使您成功地将mysql服务器配置为在连接丢失时自动重新连接,也需要时间来发现它,并且您可能会在那个时候继续查询。回答得很好!大多数网络告诉我们增加限制,但对于某些边缘情况,这是不可取的,因为我们不知道可能需要多长时间。这对于这些情况非常理想。自动重新连接的原因很多,就在…的第一段。。。。。