Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL连接错误-实现重试逻辑_Php_Mysql_Azure - Fatal编程技术网

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

PHP MySQL连接错误-实现重试逻辑,php,mysql,azure,Php,Mysql,Azure,我们看到很多PHP和MYSQL连接失败的问题。有人建议,如果数据库连接不成功,我们应该构建重试逻辑。我已将代码和错误消息粘贴到下面 有人能告诉我在这段代码中实现重试逻辑的最佳方法是什么吗?有处理这个问题的代码示例吗 PHP警告:mysqli_connect():[2002]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立了连接(尝试通过tcp://us-cdbr-azure-west-a.cloudapp.net:3306)在第232行的D:\home\site\wwwroot\xdf

我们看到很多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;
}   

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

虽然我以前从未这样做过,但在我看来,在建立连接之前,您可以递归调用函数

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;
    }

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

除了担心重试逻辑外,您可能首先希望了解这些错误发生的原因,为什么数据库连接超时如此严重often@Hanky웃这些错误一定会发生,不是因为代码出了问题,而是因为共享的基础设施。这些都是暂时性错误,应用程序的架构应该能够优雅地处理这些错误。我建议我们在通话中加入重试次数,同时进行一些睡眠。我建议查看CodePlex上的
瞬时故障处理企业库应用程序块
,并在PHP中实现类似的策略来处理这些瞬时错误。