3

PHP と PDO を使用して MySQL データベースに接続しています。MySQL エラーが例外としてスローされるように、PDO 接続を構成しました。

$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

ここで、エラーを生成する MySQL コマンドを実行し、それをキャッチしたとします。エラー メッセージは次のとおりです。

SQLSTATE [23000]: 整合性制約違反: 1048 列 '名前' を null にすることはできません

使用する$exception->getCode()と が返されますが23000、これは PHP などからのものだと思います。1048特定の MySQL エラー ( ) を catch ブロック内で取得するにはどうすればよいですか?

4

2 に答える 2

7

PDOExceptionオブジェクトには、によって返されるものと同じ 3 要素配列であるプロパティがあります。MySQL エラー コードは要素 1 です。errorInfoPDO::errorInfo()

try {
    . . .
} catch (PDOException $e)
    $errorInfo = $e->errorInfo;
    error_log "MySQL error " . $errorInfo[1] . "\n";
}

PS: エラーをエコーするだけでは適切な例外処理ではないことに注意してください。情報にアクセスする方法を示すためにそうしているだけです。

于 2013-04-12T01:07:40.283 に答える
3

PDO を使用しているため、SQL からエラー情報を取得する方法に関する優れた説明と例を提供するhereを参照できます。

于 2013-04-12T01:06:23.640 に答える