我们看到很多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;
}
答案 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;
}
因此,当您的连接有错误时,该方法将调用自身并仅在跳过catch
和if
块(建立连接)时返回(true)