Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何捕获异常DB::unprepared()_Php_Mysql_Laravel 5_Pdo - Fatal编程技术网

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

Php 如何捕获异常DB::unprepared(),php,mysql,laravel-5,pdo,Php,Mysql,Laravel 5,Pdo,我想在Laravel5.5中运行SQL脚本文件,我使用了迄今为止很好的DB::unprepared($SQL)。但是我发现DB::unprepared($sql)似乎没有返回任何错误异常。我尝试了不同的方法,但仍然不起作用 这里有一些我尝试过的Exception类:\Exception,PDOException,\illustration\Database\QueryException,但不起作用 通过执行此操作,尝试从DP::unprepared($sql)获取bolean返回$return=

我想在Laravel5.5中运行SQL脚本文件,我使用了迄今为止很好的
DB::unprepared($SQL)
。但是我发现
DB::unprepared($sql)
似乎没有返回任何错误
异常
。我尝试了不同的方法,但仍然不起作用

这里有一些我尝试过的
Exception
类:
\Exception,PDOException,\illustration\Database\QueryException
,但不起作用

通过执行此操作,尝试从
DP::unprepared($sql)
获取
bolean
返回
$return=DB::unprepared($sql);var_dump($返回)但始终返回
TRUE

我尝试使用
DB::statement($sql)
,但它似乎只用于执行
语句
语句
。我需要在不做任何修改的情况下运行整个sql文件


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

您可以使用try catch检查它:

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

同时查看参考资料:

@Kenjiro,我相信你已经解决了你的问题,半年过去了。但是,如果我答对了,请记下我的答案,因为这将有助于将来有同样问题的人。这篇文章是谷歌搜索的第一篇,没有答案…

好吧,看起来像我一样,您向DB::unprepared提交了一个多状态查询

说:

即使输入了
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
将引发异常


就这样。

我试过了,但运气不好。我只是更新我的问题。我提到了一些我尝试过的例外情况。我使用的是Laravel 5.5谢谢你的回答,但是没有,我还没有解决。现在我只需要确保所有的东西都在SQL编辑器中工作,并放到我的源代码中。“我明天会试试你的解决办法。”Kenjiro,我很高兴能帮上忙。更新:在此消息发布前几个小时,我为迁移编写的新版本已部署到生产环境中,然后错误终于浮出水面。实际上,如果存在,原始的是
drop触发器;创建触发器;执行程序,由于缺少权限,错误出现在create trigger语句中。我很确定问题出在
创建触发器中,但不知道原因。我们无法进入生产现场,现在infra的人有数据来指导他们进行故障排除。@Kenjiro,请不要忘记提供我的答案,如果它证明有用,好吗?
$sql = 'drop temporary table if exists tmp_data;'

DB::unprepared($sql);

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

DB::unprepared($sql)