php - 重新连接 MySQL 服务器已经消失

标签 php mysql error-handling pdo

如何修改此类以在 MySQL 服务器消失时捕获异常并重新连接?

<?php
class DBConn
{
private $conn;

public function __construct( $persistent = false )
{
    try
    {
        $this->conn = new PDO( "mysql:host=localhost;dbname=test", 'test', "hoollaahaoo" );
        $this->conn->exec( "SET CHARACTER SET utf8" );
        $this->conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); 
        if ( $persistent )
            $this->conn->setAttribute( PDO::ATTR_PERSISTENT, true );
    }
    catch( PDOException $e )
    {
        return $e->getMessage();
    }
}

public function getConn()
{
    return $this->conn;
}
}

最佳答案

你可能需要像这样创建你自己的类

  1. __construct 中移除 try/except
  2. 然后像这样连接到你的数据库:
$conn = null;
$limit = 10;
$counter = 0;
while (true) {
  try {
    $conn = DBConn();
    break;
  }
  catch (Exception $e) {
    $conn = null;
    $counter++;
    if ($counter == $limit)
      throw $e;
  }

}

EDIT 1:

but if you say that your server goes away.... then may be smth like this

protected function _connect( $persistent = false ) {
$conn = null;
$limit = 10;
$counter = 0;
while (true) {
  try {
        $this->conn = new PDO( "mysql:host=localhost;dbname=test", 'test', "hoollaahaoo" );
        $this->conn->exec( "SET CHARACTER SET utf8" );
        $this->conn->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); 
        if ( $persistent )
            $this->conn->setAttribute( PDO::ATTR_PERSISTENT, true );
}
  catch (Exception $e) {
    $conn = null;
    $counter++;
    if ($counter == $limit)
      throw $e;
  }
}

public function __construct( $persistent = false )
{
    $this->_connect($persistent);
}

关于php - 重新连接 MySQL 服务器已经消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860709/

相关文章:

javascript - 将 PHP 数组传递给 JavaScript 的最佳方法

PHP MySQL 从临时列中获取数据

mysql - 使用 MySQL 多次选择同一列

javascript - 如何从JavaScript错误行号获取实际行

php - 为什么ob_get_clean()在函数体中不起作用?

ruby-on-rails - Rails 客户端验证 : how to show positive messages?

php - MYSQL结合两个查询来获得功能

php - 将机器人与人类访客区分开来获取统计信息?

php - mysql 查询 - 如何创建此查询?

mysql - 基于 mysql 上映射表的列名