捕获查询异常?
Catching a query exception?
我的数据库中有一个 slug 列,它是唯一的。
如果我尝试存储具有非唯一 slug 的另一行,我会收到 QueryException 错误。
我发现了这个错误,并希望 return 一条类似 "slug exists".
的错误消息
try {
User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
//return the error
}
上面很好,但我只是想知道,如果抛出另一个 QueryException,与重复的 slug 无关并且我 return 错误消息重复的 slug 怎么办。
有没有办法找出查询异常是什么,并return基于此的错误消息?我知道异常提供了它自己的消息,但我希望有一些更用户友好的东西。
可以查看异常对象的errorInfo
看起来像这样..
+errorInfo: array:3 [▼
0 => "23000"
1 => 1062
2 => "Duplicate entry 'abc@gmail.com' for key 'users_email_unique'"
你可以在catch中写如下代码..
try{}
catch(QueryException $qe){
If ($qe->errorInfo[0] == "23000" && $qe->errorInfo[1] == "1062"){
return "Your message"
}else{
return "General Message"
}
}
要检查您是否因为重复而得到 QueryException
,请检查 $e->getCode()
是否等于 23000
。
当由于约束而出现重复时,MySQL 将发出 signal SQLSTATE 23000
,您可以使用它来确定到底出了什么问题。您可以在 MySQL 中实现您自己的信号以发出有关各种错误的信号(通过触发器等)
示例:
try {
User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
if($e->getCode() === '23000') {
// you got the duplicate
}
}
我的数据库中有一个 slug 列,它是唯一的。
如果我尝试存储具有非唯一 slug 的另一行,我会收到 QueryException 错误。
我发现了这个错误,并希望 return 一条类似 "slug exists".
的错误消息try {
User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
//return the error
}
上面很好,但我只是想知道,如果抛出另一个 QueryException,与重复的 slug 无关并且我 return 错误消息重复的 slug 怎么办。
有没有办法找出查询异常是什么,并return基于此的错误消息?我知道异常提供了它自己的消息,但我希望有一些更用户友好的东西。
可以查看异常对象的errorInfo
看起来像这样..
+errorInfo: array:3 [▼
0 => "23000"
1 => 1062
2 => "Duplicate entry 'abc@gmail.com' for key 'users_email_unique'"
你可以在catch中写如下代码..
try{}
catch(QueryException $qe){
If ($qe->errorInfo[0] == "23000" && $qe->errorInfo[1] == "1062"){
return "Your message"
}else{
return "General Message"
}
}
要检查您是否因为重复而得到 QueryException
,请检查 $e->getCode()
是否等于 23000
。
当由于约束而出现重复时,MySQL 将发出 signal SQLSTATE 23000
,您可以使用它来确定到底出了什么问题。您可以在 MySQL 中实现您自己的信号以发出有关各种错误的信号(通过触发器等)
示例:
try {
User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
if($e->getCode() === '23000') {
// you got the duplicate
}
}