Php 在使用Laravel DB Builder时捕获mysql*警告*(非异常)?

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

我有一个BIGINT字段,为了进行测试,我将该字段设置为最大值,然后尝试添加更多。下面的代码返回successful,但没有引发\异常,但它在sql查询中引发警告,显然没有更新字段。如何捕获警告并返回警告消息,说明字段已达到最大值?(如您所见,我尝试了DB::transaction和try/catch,但都没有成功)


谢谢。

您可以在不捕获异常的情况下执行另一个语句(警告不是异常)。语法:

显示警告[限制[偏移量,]行计数]

显示计数(*)警告

插入查询后,您可以执行以下操作:


统计警告次数

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"
  }
}