我有一个数据库类:
<?php
namespace Database\MySQL;
class Database
{
function __construct(){
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$this->Connection = new mysqli(
"", // Testing with no host
"", // Testing with no user
"", // ... no password
"" // and no DB name
);
}
catch (mysqli_sql_exception $e) {
throw $e;
}
...
?>
但是我得到致命错误而不是获得异常:Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No database selected' in Database.php
。
我用简单的查询尝试了同样的事情:
try {
$this->Connection->query("SET NAMES 'utf87'"); //utf87 just for test
}
catch (mysqli_sql_exception $e) {
throw $e;
}
我仍然得到Fatal error: Uncaught exception
。
答案 0 :(得分:3)
您的问题是catch
异常,但只是throw
再次catch
而不throw $e;
。
如果将echo "Caught the exception";
替换为try
,您将看到您的脚本正在捕获异常。但是因为你再次抛出它会导致错误,除非你有一个更高级别的catch
/ use
块或一个全局异常处理程序。
此外,正如许多人在评论中指出的那样,您需要注意命名空间。您需要使用\mysqli_sql_exception
语句或参考{{1}}。