İstisnalar
Nette Database bir istisna hiyerarşisi kullanır. Temel sınıf Nette\Database\DriverException
'dır, bu sınıf
PDOException
'dan miras alır ve veritabanı hatalarıyla çalışmak için genişletilmiş yetenekler sağlar:
getDriverCode()
metodu, veritabanı sürücüsünden hata kodunu döndürürgetSqlState()
metodu, SQLSTATE kodunu döndürürgetQueryString()
vegetParameters()
metotları, orijinal sorguyu ve parametrelerini almanızı sağlar
DriverException
'dan aşağıdaki özel istisnalar miras alır:
ConnectionException
– veritabanı sunucusuna bağlantı hatasını belirtirConstraintViolationException
– veritabanı kısıtlamalarının ihlali için temel sınıf, bundan miras alanlar:ForeignKeyConstraintViolationException
– yabancı anahtar ihlaliNotNullConstraintViolationException
– NOT NULL kısıtlaması ihlaliUniqueConstraintViolationException
– değer benzersizliği ihlali
Veritabanında zaten var olan bir e-postaya sahip bir kullanıcı eklemeye çalıştığımızda oluşan
UniqueConstraintViolationException
istisnasını yakalama örneği (e-posta sütununun benzersiz bir dizine sahip
olduğu varsayılarak).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Bu e-posta adresine sahip bir kullanıcı zaten var.';
} catch (Nette\Database\DriverException $e) {
echo 'Kayıt sırasında bir hata oluştu: ' . $e->getMessage();
}