如何在 MySQL 数据库连接失败时重定向 PHP 页面

How to redirect PHP page on MySQL database connection failure

使用 MySQLi 连接方法我试图重定向页面而不是打印出错误消息

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'demo');
 
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Check connection
if($mysqli === false){
    die("ERROR: Could not connect. " . $mysqli->connect_error);
    header('Location: http://www.example.com/'); 
}
?>

尝试对此进行测试我将 localhost 更改为 localhostszzz 但我收到

的错误消息

Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /../../page.php on line 8

我该如何解决这个问题,而不是重定向到 http://www.example.com/

您只需要编辑 if 条件。如需更多帮助,您可以访问w3schools

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'demo');

$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if ($mysqli -> connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
    header('Location: http://www.example.com/');
}
?>

你不能那样做。事实上,你不应该那样做。

您需要的是自定义错误处理程序。错误处理程序是接受所有未处理的异常、错误和警告并处理它们的东西。内置错误处理程序可以在浏览器中显示错误或记录到文件中。您必须创建自己的错误处理程序,它能够处理警告以及所有其他类型的错误。

我不会向您展示如何构建自定义错误处理程序,因为这是一个非常广泛的主题。不过,我会提出更好的建议。您的用户永远不会看到 PHP 内部错误消息。您的用户应该会看到一个友好的 500 页面,说明软件中存在问题,并且该问题已记录在文件中以供开发人员查看。您还应该让用户可以选择在紧急情况下与您联系。

当涉及到mysqli 错误处理时,您应该始终启用错误报告并且永远不要手动检查错误。使用以下两行打开连接:

// enable error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// create the object
$mysqli = new mysqli('localhost', 'inet', '5432', 'test');

不要手动检查错误。不过,你的警告不是来自mysqli,而是来自网络API in PHP。上面的设置不会对该警告产生影响。所以修复错误,启用错误日志记录,并为用户实现漂亮的 500 错误页面。不要为此类警告添加任何特殊处理。


如果您仍然对快速修复此特定警告感兴趣,可以尝试以下操作。 我强烈不建议使用它,它仅用于演示目的。

使用错误抑制运算符 @ 静音警告。启用 mysqli 错误报告,这也会触发相同的异常。捕获异常。

try {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    @$mysqli = new mysqli('localhost1', 'inet', '5432', 'test');
} catch (mysqli_sql_exception $exception) {
    exit(header('Location: error500.html'));
}

好的, 这就是我一直在寻找并且正在为我工​​作的东西 mow

  try{
      $conn = new mysqli($servername, $username, $password, $dbname);
  }
  catch(Exception $e){
    header('Location: 500.php');
    die();
}