如何捕获mysqli_connect()的警告

Ng2*_*g21 2 php mysqli

我该如何捕捉警告 mysqli_connect()

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

要么

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

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

警告:mysqli_connect():php_network_getaddresses:getaddrinfo失败:
此类主机未知。

我知道我将错误的主机放入其中,但是我想以适当的方式捕获错误。像这样的体面消息将是完美的:

不幸的是,您输入的连接详细信息不正确!

所以,我如何获得此消息而不是警告,谢谢

Qir*_*rel 5

一,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!");
}
Run Code Online (Sandbox Code Playgroud)

但是,这将记录与您得到的日志相同的警告,

php_network_getaddresses:getaddrinfo失败:名称或服务未知

尽管它不会显示在页面上。

可以通过添加禁止显示警告(因此不会将其记录)@,但是除非您明确实现自己的错误处理/报告,否则我不建议您这样做。应该记录错误。

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!");
}
Run Code Online (Sandbox Code Playgroud)