如何在PHP中启用数据库自动重新连接?
数据库是MYSQL您可以编写一个函数,通过连接ping数据库,万一数据库关闭,重新连接数据库,然后继续查询或执行任何您想要的操作,还可以查看php库,它对您很有用 另外,为了维护数据库连接,在创建数据库连接后,它将连接到数据库,然后您可以实现名为getConnection的方法,该方法每次都将执行我上面描述的检查如何在PHP中启用数据库自动重新连接?,php,mysql,Php,Mysql,数据库是MYSQL您可以编写一个函数,通过连接ping数据库,万一数据库关闭,重新连接数据库,然后继续查询或执行任何您想要的操作,还可以查看php库,它对您很有用 另外,为了维护数据库连接,在创建数据库连接后,它将连接到数据库,然后您可以实现名为getConnection的方法,该方法每次都将执行我上面描述的检查 PPS。您可以使用异常,尝试查询,每当异常捕获失败时,重新连接并重试。您可以使用该函数测试连接的状态,并在连接返回false时重新连接。如果您使用的是5.0.13之前版本的mysql,
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服务器配置为在连接丢失时自动重新连接,也需要时间来发现它,并且您可能会在那个时候继续查询。回答得很好!大多数网络告诉我们增加限制,但对于某些边缘情况,这是不可取的,因为我们不知道可能需要多长时间。这对于这些情况非常理想。自动重新连接的原因很多,就在…的第一段。。。。。