İstisnalar
Nette Veritabanı bir istisnalar hiyerarşisi kullanır. Temel sınıf, PDOException
adresini genişleten ve
veritabanı hatalarıyla çalışmak için gelişmiş işlevsellik sağlayan Nette\Database\DriverException
adresidir:
getDriverCode()
yöntemi, veritabanı sürücüsünden gelen hata kodunu döndürür.getSqlState()
yöntemi SQLSTATE kodunu döndürür.- Orijinal sorguyu ve parametrelerini almak için
getQueryString()
vegetParameters()
yöntemlerini kullanabilirsiniz.DriverException
sınıfı aşağıdaki özel istisnalar tarafından genişletilmiştir: ConnectionException
– veritabanı sunucusuna bağlanılamadığını gösterir.ConstraintViolationException
– aşağıdaki istisnaların miras aldığı veritabanı kısıtlama ihlalleri için temel sınıf:ForeignKeyConstraintViolationException
– yabancı anahtar kısıtlamasının ihlali.NotNullConstraintViolationException
– NOT NULL kısıtlamasının ihlali.UniqueConstraintViolationException
– teklik kısıtlamasının ihlali.
Aşağıdaki örnekte, veritabanında zaten var olan bir e-postaya sahip bir kullanıcı eklenmeye çalışıldığında (
email
sütununun benzersiz bir dizini olduğu varsayılarak) ortaya çıkan
UniqueConstraintViolationException
adresinin nasıl yakalanacağı gösterilmektedir:
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'A user with this email already exists.';
} catch (Nette\Database\DriverException $e) {
echo 'An error occurred during registration: ' . $e->getMessage();
}