如何捕获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失败:
没有这样的主人。
我知道我把错误的主机放在其中但我想以适当的方式捕捉错误。一个体面的信息将是完美的,就像:
很遗憾,您为连接输入的详细信息不正确!
那么,我如何得到这条消息而不是警告,谢谢
答案 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!");
}