如何捕获MySql错误代码?

时间:2012-11-14 16:52:17

标签: php mysql pdo

例如:

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这是一个非常通用的代码。用于许多不同的错误类型。

我应该解析错误消息吗?

3 个答案:

答案 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是从上面提到的函数返回的数组。

http://php.net/manual/en/pdo.errorinfo.php