Php mysql关闭时如何防止站点故障
我昨天和今天都遇到了一个问题,我的主机(godaddy)显然在使用特定的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
[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:如果你读了他现有的代码,你会发现已经有一个退出()按照我的建议,我建议他替换。那么问题出在哪里呢?