Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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 - Fatal编程技术网

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

Php mysql关闭时如何防止站点故障,php,mysql,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

我昨天和今天都遇到了一个问题,我的主机(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();
}
这会告诉php如果mysql关闭,将完全停止。所以我想我所需要做的就是删除“exit”函数,然后我就可以开始了

我想从理论上讲,为什么在这么多关于如何连接mysql的教程中默认存在exit?如果数据库不可用,则会杀死网站

我只是想听听那些比我更了解的人的想法,谢谢

就这样:

printf("Connect failed: %s\n", mysqli_connect_error());
并将其替换为占位符页面,通知人们s**t发生了,您稍后会回来

header('Location: error_db.php');

向用户显示好的和漂亮的错误消息常常被大多数程序员忽略。这是因为用正确的方式做事会让人感到很痛苦

正如Jassica所评论的,如果您的整个站点在没有数据库连接的情况下运行,您只需删除函数中的
exit()
,站点就可以运行了

然而,我想没有数据库连接的100%功能站点的机会很小。大多数网站所做的是将用户重定向到一个500错误页面,在那里他们会通知用户出了问题。经常提供联系信息,以便通知合适的人。Twitter做到了这一点,Facebook、Reddit和其他许多网站也做到了这一点

您只需执行以下操作:

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

或者类似的东西。

这应该可以解决问题

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

如果你无法连接到数据库,你的网站的其他部分还能工作吗?记住不要发布任何敏感数据,如用户名或密码。现在在服务器上更改它们。是否使用缓存机制?像memcached吗?@dev空居住者啊!谢谢大家!@杰西卡:事实上,它的大部分功能都不正常(这不会停止页面代码的其余部分的执行,可能不是您想要的。应该始终具有
die();
exit());
在头重定向之后。如上所述,在头重定向之后忘记退出或死掉是常见的错误。任何使用这种重定向的人都应该退出他们当前运行的代码,如果不是有意的话。@Madcoe:如果你读了他现有的代码,你会发现已经有一个退出()按照我的建议,我建议他替换。那么问题出在哪里呢?