【问题标题】:How To Catch Exception DB::unprepared()如何捕获异常 DB::unprepared()
【发布时间】:2019-01-10 08:46:54
【问题描述】:

我想在 Laravel 5.5 中运行 SQL 脚本文件,我使用 DB::unprepared($sql),目前为止还不错。但我发现DB::unprepared($sql) 似乎没有返回任何错误Exception。我尝试了不同的方法,但仍然没有成功。

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

尝试通过这样做$return = DB::unprepared($sql); var_dump($return); 尝试从DP::unprepared($sql) 返回bolean,但总是返回TRUE

我尝试使用DB::statement($sql),但它看起来仅用于执行statement per statement。我需要运行整个 sql 文件而不做任何修改。

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

【问题讨论】:

    标签: php mysql laravel-5 pdo


    【解决方案1】:

    @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 将引发异常。

    就是这样。

    【讨论】:

    • 谢谢你的回答,但是没有,我还没有解决。现在我只需要确保一切都在 SQL 编辑器中工作,并放置到我的源代码中。我明天试试你的解决方案。
    • @Kenjiro,我很高兴能帮上忙。更新:在此消息前几个小时,我为迁移编写的新版本已部署在生产中,然后错误终于浮出水面。其实原来是drop trigger if exists; create trigger; exec procedure;,由于权限不足,在create trigger语句中报错。我很确定问题出在create trigger,但不知道原因。我们无法进入生产环境,现在基础设施人员有数据来指导他们完成故障排除。
    • @Kenjiro,请不要忘记我的答案,如果它被证明有用,交易?
    【解决方案2】:

    您可以使用 try catch 进行检查:

        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

    【讨论】:

    • 我试过了,但没有运气。我只是更新我的问题。我提到了一些我尝试过的例外。我使用 Laravel 5.5
    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多