Php 无法捕获SQL异常
我有一个数据库类:Php 无法捕获SQL异常,php,mysqli,Php,Mysqli,我有一个数据库类: <?php namespace Database\MySQL; class Database { function __construct(){ mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); try { $this->Connection = new mysqli( "", // Testi
<?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;
}
...
?>
我仍然得到了致命的错误:未捕获的异常您的问题是您正在捕获异常,但只是在没有捕获异常的情况下再次抛出异常 如果替换
则抛出$e代码>带有echo“捕获异常”代码>,您将看到脚本正在捕获异常。但由于您再次抛出它,它将导致错误,除非您有更高级别的try
/catch
块或全局异常处理程序
此外,正如许多人在评论中指出的那样,您需要小心名称空间。您需要使用use
语句或参考\mysqli\u sql\u exception
您的问题是您正在catch
捕获异常,但只是再次抛出它而不catch
捕获它
如果替换则抛出$e代码>带有echo“捕获异常”代码>,您将看到脚本正在捕获异常。但由于您再次抛出它,它将导致错误,除非您有更高级别的try
/catch
块或全局异常处理程序
此外,正如许多人在评论中指出的那样,您需要小心名称空间。您需要使用use
语句或参考\mysqli\u sql\u exception
您的问题是您正在catch
捕获异常,但只是再次抛出它而不catch
捕获它
如果替换则抛出$e代码>带有echo“捕获异常”代码>,您将看到脚本正在捕获异常。但由于您再次抛出它,它将导致错误,除非您有更高级别的try
/catch
块或全局异常处理程序
此外,正如许多人在评论中指出的那样,您需要小心名称空间。您需要使用use
语句或参考\mysqli\u sql\u exception
您的问题是您正在catch
捕获异常,但只是再次抛出它而不catch
捕获它
如果替换则抛出$e代码>带有echo“捕获异常”代码>,您将看到脚本正在捕获异常。但由于您再次抛出它,它将导致错误,除非您有更高级别的try
/catch
块或全局异常处理程序
此外,正如许多人在评论中指出的那样,您需要小心名称空间。您需要使用use
语句或参考\mysqli\u sql\u exception
您的数据库类是否具有命名空间?@sectus,实际上是的。但是我确实做了new\mysqli
并且尝试了catch(\mysqli\u sql\u exception$e)
只是为了确定。等等。。。你所说的扔$e是什么意思代码>?@sectus其实没关系。即使我使用die(“错误”)代码>改为抛出$e代码>,我应该通过使用catch块获得任何输出。但是,catch{…}
被完全忽略。@Nordenheim,请再试一次以捕获\mysqli\u sql\u异常。不要重复。你的数据库类有名称空间吗?@sectus,事实上,是的。但是我确实做了new\mysqli
并且尝试了catch(\mysqli\u sql\u exception$e)
只是为了确定。等等。。。你所说的扔$e是什么意思代码>?@sectus其实没关系。即使我使用die(“错误”)代码>改为抛出$e代码>,我应该通过使用catch块获得任何输出。但是,catch{…}
被完全忽略。@Nordenheim,请再试一次以捕获\mysqli\u sql\u异常。不要重复。你的数据库类有名称空间吗?@sectus,事实上,是的。但是我确实做了new\mysqli
并且尝试了catch(\mysqli\u sql\u exception$e)
只是为了确定。等等。。。你所说的扔$e是什么意思代码>?@sectus其实没关系。即使我使用die(“错误”)代码>改为抛出$e代码>,我应该通过使用catch块获得任何输出。但是,catch{…}
被完全忽略。@Nordenheim,请再试一次以捕获\mysqli\u sql\u异常。不要重复。你的数据库类有名称空间吗?@sectus,事实上,是的。但是我确实做了new\mysqli
并且尝试了catch(\mysqli\u sql\u exception$e)
只是为了确定。等等。。。你所说的扔$e是什么意思代码>?@sectus其实没关系。即使我使用die(“错误”)代码>改为抛出$e代码>,我应该通过使用catch块获得任何输出。但是,catch{…}
被完全忽略。@Nordenheim,请再试一次以捕获\mysqli\u sql\u异常。别再重复了。不,不是真的。我使用了catch(mysqli_sql_exception$e){die(“ERROR”)}
而致命错误仍然是一样的。请使用\mysqli_sql_exception
进行尝试,并验证异常发生的行实际上在try
块中。这听起来很像是一个名称空间问题和/或您只是没有在try
/catch
block.P.S.中包含所有相关代码。不管其他问题如何,我可以100%保证,如果没有更高级别的异常处理程序,只要再次抛出异常就会导致致命错误。是的,我有时觉得自己很傻。它由\mysqli\u sql\u exception
解决,这是一个名称空间问题。不,不是真的。我使用了catch(mysqli_sql_exception$e){die(“ERROR”)}
而致命错误仍然是一样的。请使用\mysqli_sql_exception
进行尝试,并验证异常发生的行实际上在try
块中。这听起来很像是一个名称空间问题和/或你只是个n
try {
$this->Connection->query("SET NAMES 'utf87'"); //utf87 just for test
}
catch (mysqli_sql_exception $e) {
throw $e;
}