Newmysqli():如何拦截“无法连接”错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我要这么做(是的,我使用了错误的连接数据,这是为了强制连接错误)

26 try {
27     $connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ;
28 } catch (Exception $e ) {
29     echo "Service unavailable";
30     exit (3);
31 }

但是PHP正在执行这个php_警告:

mysqli::mysqli():(28000/1045):拒绝用户的访问_用户‘@’localhost‘(使用密码:是)

在这个例子中,我使用错误的连接数据来强制连接错误,但是在现实世界中,数据库可能被关闭,或者网络可能被关闭等等。

问题:有没有办法,在没有压制警告的情况下,来拦截数据库连接的问题?

提问于
用户回答回答于

需要告诉mysqli抛出异常:

mysqli_report(MYSQLI_REPORT_STRICT);

try {
     $connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ;
} catch (Exception $e ) {
     echo "Service unavailable";
     echo "message: " . $e->message;   // not in live code obviously...
     exit;
}

现在你要抓住这个异常,然后你就可以从那里得到它。

用户回答回答于

PHP 5.2.9+

if ($mysqli->connect_error) {
    die('Connect Error, '. $mysqli->connect_errno . ': ' . $mysqli->connect_error);
}

正如Jeroen所建议的那样,也希望将ReportMode设置为一个严格的级别,但是上面的代码对于具体检测连接错误仍然很有用。这两种方法的结合是PHP手册...

扫码关注云+社区