无法捕获SQL异常

时间:2014-11-14 05:21:10

标签: php mysqli

我有一个数据库类:

<?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

1 个答案:

答案 0 :(得分:3)

您的问题是catch异常,但只是throw再次catch而不throw $e;

如果将echo "Caught the exception";替换为try,您将看到您的脚本正在捕获异常。但是因为你再次抛出它会导致错误,除非你有一个更高级别的catch / use块或一个全局异常处理程序。

此外,正如许多人在评论中指出的那样,您需要注意命名空间。您需要使用\mysqli_sql_exception语句或参考{{1}}。