Php 在使用Laravel DB Builder时捕获mysql*警告*(非异常)?
我有一个BIGINT字段,为了进行测试,我将该字段设置为最大值,然后尝试添加更多。下面的代码返回successful,但没有引发\异常,但它在sql查询中引发警告,显然没有更新字段。如何捕获警告并返回警告消息,说明字段已达到最大值?(如您所见,我尝试了DB::transaction和try/catch,但都没有成功)Php 在使用Laravel DB Builder时捕获mysql*警告*(非异常)?,php,laravel,laravel-5,laravel-5.1,Php,Laravel,Laravel 5,Laravel 5.1,我有一个BIGINT字段,为了进行测试,我将该字段设置为最大值,然后尝试添加更多。下面的代码返回successful,但没有引发\异常,但它在sql查询中引发警告,显然没有更新字段。如何捕获警告并返回警告消息,说明字段已达到最大值?(如您所见,我尝试了DB::transaction和try/catch,但都没有成功) 谢谢。您可以在不捕获异常的情况下执行另一个语句(警告不是异常)。语法: 显示警告[限制[偏移量,]行计数] 显示计数(*)警告 插入查询后,您可以执行以下操作: 统计警告次数 D
谢谢。您可以在不捕获异常的情况下执行另一个语句(警告不是异常)。语法: 显示警告[限制[偏移量,]行计数] 显示计数(*)警告 插入查询后,您可以执行以下操作:
统计警告次数
DB::statement('SHOW WARNINGS');
$warning = DB::select('SELECT @@warning_count');
如果出现警告,它将返回:
array(1) {
[0]=>
object(stdClass)#412 (1) {
["@@warning_count"]=>
string(1) "1"
}
或
如果没有警告发生
警告消息和代码
DB::statement('SHOW WARNINGS');
$warning = DB::select('SELECT @@warning_count');
要获取警告消息,请执行以下操作:
$warning_messages = DB::select('SHOW WARNINGS');
返回:
array(1) {
[0]=>
object(stdClass)#412 (3) {
["Level"]=>
string(7) "Warning"
["Code"]=>
string(4) "1264"
["Message"]=>
string(79) "Out of range value for column 'quantity' at row 1"
}
}
查看关于的文档您可以在插入查询后使用此查询
选择@@warning\u count
它将返回警告计数,以便您可以进行检查。在插入查询之前检查$quantity
如何?@Daenu我想我可以这样做…但当mysql已经生成警告时,这是一个额外的查询。我想我只是希望听到警告。但其他一切都失败了,我想我可以试试。谢谢你的建议。编辑了我的答案以适合Laraveltanks。我刚刚使用@Gouda Elalfy的信息和您之前提供的mySQL警告链接到达那里。它仍然涉及到另一个数据库命中,但我没有看到任何其他的方式来获得它。最后,我使用了以下内容(对于寻找相同内容的任何人):if($warning=DB::select(“SHOW WARNINGS”){$msg=($warning[0]->code==1264)?“该值超过了一个或多个用户的‘数量’字段的最大值。”:'Mysql warning#'。$warning[0]->code.“。$warning[0]->Message.”return redirect()->back()->withErrors($msg)->withInput();}否则{…做点什么…
FYI-您不需要DB::raw(),只需要$warning=DB::select(“SHOW WARNINGS”)
就可以了。
$warning_messages = DB::select('SHOW WARNINGS');
array(1) {
[0]=>
object(stdClass)#412 (3) {
["Level"]=>
string(7) "Warning"
["Code"]=>
string(4) "1264"
["Message"]=>
string(79) "Out of range value for column 'quantity' at row 1"
}
}