【发布时间】:2014-06-24 23:13:03
【问题描述】:
我正在尝试在 laravel 3 中捕获 PDOException,但似乎我无法做到这一点。我的代码如下:
try{
DB::connection()->pdo->beginTransaction();
Myobject::create($cleaned_input_array);
// do other stuff that could possibly throw a custom exception
DB::connection()->pdo->commit();
}
catch(\PDOException $e)
{
DB::connection()->pdo->rollBack();
return HTTP_STATUS::response(BAD_REQUEST, array("error creating");
}
catch(Exception $e)
{
DB::connection()->pdo->rollBack();
return HTTP_STATUS::response(BAD_REQUEST, array($e->getMessage()));
}
如果 'try' 中的其他部分抛出异常,则捕获一般异常。如果他们不这样做,一切都会运行干净。如果create 在执行 MYSQL 语句时遇到问题,它不会抛出 PDOException,它只是抛出一般异常。
【问题讨论】:
-
为什么你的
PDOException前面有个\ -
我读到您可以在 PDOException 前面放置一个“\”来解决命名空间问题。即使我删除了“\”,我仍然无法捕捉到 PDOException。我应该注意,创建时的错误被作为一般异常抛出......
-
为什么不转储
$e的类型,例如get_class($e)?这至少会告诉您在通用异常处理程序中捕获的异常类型 -
请扩展似乎相关的
Myobject(您希望它会抛出 PDOException!),以便人们可以轻松地重现该问题。 -
请移除第一个 catch 块并 var_dump 抛出 PDOException 时应该得到的通用异常...
标签: php mysql laravel laravel-3