如何在mysql关闭时防止站点故障

时间:2013-12-27 19:19:34

标签: php mysql

昨天我和我的主人(godaddy)遇到了一个问题,他显然遇到了一个特定的mysql服务器问题...因为它一次完全没有佣金几个小时。

现在这导致我的网站根本无法加载 - 显示此错误:

[phpBB Debug] PHP Warning: in file /home/content/index.php on line 53: mysqli::mysqli() [mysqli.mysqli]: (HY000/2003): Can't connect to MySQL server on 'dbserver.com' (110)
Connect failed: Can't connect to MySQL server on 'dbserver.com' (110)

我猜它显示因为这个代码我有:

// PREPARE DB CONNECTION
$mysqli = new mysqli("dbserver.com", "username", "password", "dbname");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

如果mysql崩溃,这告诉php完全停止。所以我想我需要做的就是删除“退出”功能,我很高兴去?

我想从理论上讲,为什么在如此多的教程中默认退出如何连接到mysql?如果数据库不可用,它会终止网站。

只是寻找那些比我更了解的人的想法,谢谢!

3 个答案:

答案 0 :(得分:5)

请点这个:

printf("Connect failed: %s\n", mysqli_connect_error());

并将其替换为占位符页面,以告知人们发生了这种情况,您将在稍后返回。

header('Location: error_db.php');

答案 1 :(得分:1)

大多数程序员经常忽略向用户显示好的和漂亮的错误消息。这是因为以正确的方式做屁股真的很痛苦。

正如Jassica评论的那样,如果您的整个网站在没有数据库连接的情况下运行,您只需删除功能中的exit(),该网站就可以了。

但是,我认为没有数据库连接的100%功能站点的可能性非常小。大多数网站将用户重定向到500-errorpage,告知用户出现了问题。通常提供联系信息,以便也可以通知合适的人员。 Twitter这样做,Facebook,Reddit等等也是如此。

你可以这样做:

$mysqli = new mysqli("dbserver.com", "username", "password", "table");
if (mysqli_connect_errno()) {
    header("Location: error500.html");
    exit();
}

或类似的东西。

答案 2 :(得分:1)

这应该可以解决问题。

function connect($u,$p,$db,$host) { 
   try { 
      $mysqli = new mysqli($host,$u,$p,$db); 
      $connected = true; 
   } catch (mysqli_sql_exception $e) { 
      throw $e; 
   } 
} 

try { 
  connect('username','password','database','host');  
} catch (Exception $e) { 
  echo $e->errorMessage(); 
}