我们看到很多 PHP 和 MYSQL 连接失败问题。有人建议,如果数据库连接不成功,我们应该构建重试逻辑。我已将代码和错误消息粘贴在下面。
有人可以建议在这段代码中实现重试逻辑的最佳方法是什么吗?有处理这个问题的代码示例吗?
PHP 警告:mysqli_connect(): [2002] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立了连接(尝试通过 tcp://us-cdbr-azure-west 进行连接) -a.cloudapp.net:3306) 在 D:\home\site\wwwroot\xdfdy.php 第 232 行
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;
}
最佳答案
如果跟随那些已经发明了轮子的人,他们说每一次不必要的数据库连接尝试都可能会遇到性能问题,这也是他们建议您只需要一个数据库实例的原因之一,我会告诉您做不要这样做,但是,问题被提出了。
虽然我以前从未这样做过,但在我看来,你可以递归地调用你的函数,直到建立连接
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
和 if
block 时返回 (true)(连接为成立)
关于PHP MySQL 连接错误 - 实现重试逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381010/