如何捕获mysqli_connect()

时间:2017-09-10 22:37:10

标签: php mysqli

如何捕获mysqli_connect()

的警告

实施例

if (!$connection2 = mysqli_connect($host, $username, $password, $name)){
    die('MySQL ERROR: ' . mysql_error()); 
}

OR

$connection2 = mysqli_connect($host, $username, $password, $name);
if (!$connection2){
    die('MySQL ERROR: ' . mysql_error()); 
}

所以,我试图通过在其中放置错误的主机,用户名等来测试mysqli_connect()方法。但是当我把错误的变量放在其中时,例如我放hostlocal而不是localhost。它给了我这个错误

  

警告:mysqli_connect():php_network_getaddresses:getaddrinfo失败:
  没有这样的主人。

我知道我把错误的主机放在其中但我想以适当的方式捕捉错误。一个体面的信息将是完美的,就像:

  

很遗憾,您为连接输入的详细信息不正确!

那么,我如何得到这条消息而不是警告,谢谢

1 个答案:

答案 0 :(得分:4)

首先,mysql_error()不会给你任何东西。它是另一个库mysql_的一部分,它不与新的mysqli_交换。话虽这么说,你可以设置MySQLi来抛出异常,然后你可以捕获它们。

如果启用了错误记录,则仍会记录警告(因为它应该!)。但是如果连接失败,您可以捕获错误并向页面显示更加用户友好的内容。您永远不应该向实际项目显示实际的错误消息 - 在开发中它很好,但在任何实时环境中从不

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Set MySQLi to throw exceptions 

try {
    $connection2 = mysqli_connect($host, $username, $password, $name);
} catch (mysqli_sql_exception $e) {
    // $e is the exception, you can use it as you wish 
    die("Unfortunately, the details you entered for connection are incorrect!");
}

然而,这会记录与您获取日志相同的警告,

  

php_network_getaddresses:getaddrinfo failed:名称或服务未知

虽然它不会显示在页面上。

可以通过添加@来取消警告(因此无法记录),但除非您明确实施自己的错误,否则我不推荐它 - 处理/报告。应记录错误。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // Set MySQLi to throw exceptions 

try {
    $connection2 = @mysqli_connect($host, $username, $password, $name);
} catch (mysqli_sql_exception $e) {
    error_log($e->getMessage()); // Log the error manually
    die("Unfortunately, the details you entered for connection are incorrect!");
}