PHP MySQL连接错误 - 实现重试逻辑

时间:2014-04-30 06:21:28

标签: php mysql azure

我们看到很多PHP和MYSQL连接失败问题。有人建议,如果数据库连接不成功,我们将构建重试逻辑。我已经粘贴了代码和错误消息。

有人可以建议在这段代码中实现重试逻辑的最佳方法是什么?处理这个的任何代码示例?

PHP警告:mysqli_connect():[2002]连接尝试失败,因为连接方在一段时间后没有正确响应,或者已建立连接(尝试通过tcp连接:// us-cdbr-azure-west -a.cloudapp.net:3306)在第232行的D:\ home \ site \ wwwroot \ xdfdy.php

PHP警告:mysqli_connect():( HY000 / 2002):连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败。

public function connect_to_mysqldb () { 
try 
{
    $this->conn =  mysqli_connect('us-cdbr-azure-west-a.cloudapp.net','xxxxx','password', 'dbname');
} 
catch (DbException  $e) {
    return false;
}
        // Check connection
if (mysqli_connect_errno($this->conn ))
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  return false;
  }

    return true;
}   

1 个答案:

答案 0 :(得分:0)

如果关注已经发明了轮子的人,说每次不必要的数据库连接尝试都会遇到性能问题,也是他们建议你只需要一个数据库实例的原因之一,我会告诉你DO不要这样做,但问题是这样。

虽然我之前从未这样做过,但对我来说似乎可以递归调用函数直到建立连接

public function connect_to_mysqldb () { 
        try 
        {
            $this->conn =  mysqli_connect('us-cdbr-azure-west-a.cloudapp.net','xxxxx','password', 'dbname');
        } 
        catch (DbException  $e) {
                    // write into logs maybe?
            $this->connect_to_mysqldb();
        }
        // Check connection (maybe unreachable because of the catch block?)
        if (mysqli_connect_errno($this->conn ))
        {
            $this->connect_to_mysqldb();
        }
        return true;
    }

因此,当您的连接有错误时,该方法将调用自身并仅在跳过catchif块(建立连接)时返回(true)