如何在laravel中捕获查询异常以查看它是否失败?

时间:2015-11-12 19:45:09

标签: sql laravel-5

我要做的就是验证查询。

'SELECT * from table_that_does_not_exist'

如果没有错误,我想知道它失败了所以我可以返回一个响应,指出“错误:表不存在”或一般错误。

3 个答案:

答案 0 :(得分:39)

捕获任何sql语法或查询错误的最简单方法是在为查询提供闭包后捕获Illuminate\Database\QueryException

try { 
  $results = \DB::connection("example")
    ->select(\DB::raw("SELECT * FROM unknown_table"))
    ->first(); 
    // Closures include ->first(), ->get(), ->pluck(), etc.
} catch(\Illuminate\Database\QueryException $ex){ 
  dd($ex->getMessage()); 
  // Note any method of class PDOException can be called on $ex.
}

如果有任何错误,程序将die(var_dump(...))无论需要什么。

注意:对于命名空间,如果该类未包含在\语句中,则需要先use

另作参考:Laravel 5.1 API - Query Exception

答案 1 :(得分:1)

使用try-catch语句包装希望捕获异常的代码行

try
{
//write your codes here
}
catch(Exception $e)
{
   dd($e->getMessage());
}

不要忘记说出控制器顶部的Exception类

Use Exception;

答案 2 :(得分:0)

如果要捕获所有类型的数据库异常,可以在laravel Exception Handler

上捕获
if ($exception instanceof \PDOException) {
    # render a custom error
}