我想在Laravel 5.5中运行SQL脚本文件,并且我使用DB::unprepared($sql)
到目前为止还不错。但是我发现DB::unprepared($sql)
似乎没有返回任何错误Exception
。我尝试使用其他方法,但仍然无法正常工作。
以下是我尝试的一些Exception
类:\Exception, PDOException, \Illuminate\Database\QueryException
,但是没有用。
尝试通过执行此bolean
从DP::unprepared($sql)
返回$return = DB::unprepared($sql); var_dump($return);
,但总是返回TRUE
我尝试使用DB::statement($sql)
,但似乎仅用于按statement
执行statement
。我需要运行整个sql文件,而无需进行任何修改。
有人可以帮助我如何捕获任何SQL脚本错误吗?任何可以帮助我捕获SQL异常的laravel函数方法?
答案 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