例外
Nette Databaseは例外の階層を使用します。基本クラスは Nette\Database\DriverException
で、これは PDOException
を継承し、データベースエラーを処理するための拡張機能を提供します:
getDriverCode()
メソッドは、データベースドライバからのエラーコードを返しますgetSqlState()
メソッドは、SQLSTATEコードを返しますgetQueryString()
およびgetParameters()
メソッドは、元のクエリとそのパラメータを取得できます
DriverException
から、次の特殊な例外が継承されます:
ConnectionException
– データベースサーバーへの接続失敗を示しますConstraintViolationException
– データベース制約違反の基本クラスで、以下が継承されます:ForeignKeyConstraintViolationException
– 外部キー制約違反NotNullConstraintViolationException
– NOT NULL制約違反UniqueConstraintViolationException
– 値の一意性制約違反
UniqueConstraintViolationException
例外をキャッチする例。これは、データベースに既に存在するメールアドレスを持つユーザーを挿入しようとしたときに発生します(メールカラムに一意インデックスがあると仮定)。
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'このメールアドレスのユーザーは既に存在します。';
} catch (Nette\Database\DriverException $e) {
echo '登録中にエラーが発生しました: ' . $e->getMessage();
}