İ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() ve getParameters() 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();
}
versiyon: 4.0