如何捕获异常DB :: unprepared()

时间:2019-01-10 08:46:55

标签: php mysql laravel-5 pdo

我想在Laravel 5.5中运行SQL脚本文件,并且我使用DB::unprepared($sql)到目前为止还不错。但是我发现DB::unprepared($sql)似乎没有返回任何错误Exception。我尝试使用其他方法,但仍然无法正常工作。

以下是我尝试的一些Exception类:\Exception, PDOException, \Illuminate\Database\QueryException,但是没有用。

尝试通过执行此boleanDP::unprepared($sql)返回$return = DB::unprepared($sql); var_dump($return);,但总是返回TRUE

我尝试使用DB::statement($sql),但似乎仅用于按statement执行statement。我需要运行整个sql文件,而无需进行任何修改。

有人可以帮助我如何捕获任何SQL脚本错误吗?任何可以帮助我捕获SQL异常的laravel函数方法?

2 个答案:

答案 0 :(得分:2)

@Kenjiro,我敢肯定,半年过去了,您已经解决了您的问题。但是,如果我将它钉牢了,请标记我的答案,因为它将在以后帮助遇到相同问题的人。 这是谷歌搜索时的第一篇,并且没有答案...

好吧,似乎像我一样,您正在向DB :: unprepared提交多语句查询。

说:

$sql = '
    drop temporary table if exists tmp_data;

    create temporary table tmp_data
    select1 *
    from data;'

$result = DB::unprepared($sql)

即使输入select1中有错字,代码也会运行,而$result将是true

要使其按预期工作,我们必须提交每个声明:

$sql = 'drop temporary table if exists tmp_data;'

DB::unprepared($sql);

$sql = '
    create temporary table tmp_data
    select1 *
    from data;'

DB::unprepared($sql)

无需检查结果。对unprepared的第二次调用将引发异常。

就是这样。

答案 1 :(得分:0)

您可以通过尝试捕获进行检查:

    try { 
      //your code
    } catch(\Illuminate\Database\QueryException $ex){ 
      dd($ex->getMessage()); 
      // Note any method of class PDOException can be called on $ex.
    }

也请参考:Check This out