2

例えば:

SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction ROLLING BACK

このメッセージは、コード内でスローされた PDOEception から取得されます。1213エラー コード ( ) を傍受し、特定の処理を行いたいと考えています。

なんで?
たとえば、デッドロックとは、1 マイクロ秒ほど後にクエリを再送信する必要があることを意味します。その他のエラーは、開発者などに警告する必要があることを意味します)。

今、私はコーディングする必要があります(継承するクラス内でPDO):

    try{
        $this->lastStatement = $sql;
        $this->lastStatement->execute($params);
    }catch (PDOException $e){
        return $this->error($e);
    }

MySQL のエラーの全範囲がないように見えるため、 getCodeofを使用できません。$Eたとえば、次のエラーは次のようSQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction に返されますHY000。Which は非常に一般的なコードです。多くの異なるエラー タイプで使用されます。

エラーメッセージを解析する必要がありますか?

4

3 に答える 3

2
$e->getCode();

40001これには、 「デッドロック」を意味するSQLSTATE コードが含まれています。

于 2012-11-14T16:55:59.837 に答える
0

PDO ステートメントには、有用な情報の配列を返す関数 ->errorInfo() があります。$err[2] を確認してください。$err は、上記の関数から返された配列です。

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

于 2013-09-03T14:31:16.077 に答える
0

現時点では、エラー メッセージ自体を解析して 4 桁のエラー コードを抽出するしかありません。

$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);
于 2012-11-14T17:17:54.510 に答える