例如:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction ROLLING BACK
我从代码中抛出的PDOEception中获取此消息。我想截取错误代码(1213
)并给出具体的处理方法。
为什么?
例如死锁意味着我只需要在微秒左右后重新提交查询。其他错误,意味着我需要提醒开发人员等)。
现在我必须编写代码(在继承PDO
的类中):
try{
$this->lastStatement = $sql;
$this->lastStatement->execute($params);
}catch (PDOException $e){
return $this->error($e);
}
我无法使用getCode
的{{1}},因为它似乎没有MySQL所具有的错误总范围。例如,出现以下错误:$E
将返回SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
这是一个非常通用的代码。用于许多不同的错误类型。
我应该解析错误消息吗?
答案 0 :(得分:2)
$e->getCode();
它包含SQLSTATE代码,其中40001
表示“死锁”。
答案 1 :(得分:0)
现在,我看到的唯一选择是解析错误消息本身并提取四位错误代码。
$s='SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction';
$p='/\b[0-9]+/';
preg_match($p,$s,$m);
var_dump($m);
答案 2 :(得分:0)
PDO语句有一个函数 - > errorInfo()返回一个有用信息数组 - 检查$ err [2]其中$ err是从上面提到的函数返回的数组。