Kivételek

A Nette Database a kivételek hierarchiáját használja. Az alaposztály a Nette\Database\DriverException, amely a PDOException kiterjesztése, és kibővített funkcionalitást biztosít az adatbázis hibáinak kezelésére:

  • A getDriverCode() metódus visszaadja az adatbázis-illesztőprogram hibakódját.
  • A getSqlState() metódus az SQLSTATE kódot adja vissza.
  • A getQueryString() és a getParameters() metódusokkal az eredeti lekérdezés és annak paraméterei kérhetők le.

A DriverException osztály a következő speciális kivételekkel bővül:

  • ConnectionException – az adatbázis-kiszolgálóhoz való csatlakozás sikertelenségét jelzi.
  • ConstraintViolationException – az adatbázis-korlátozások megsértésének alaposztálya, amelyből a következő kivételek öröklődnek:
    • ForeignKeyConstraintViolationException – idegenkulcsos korlátozás megsértése.
    • NotNullConstraintViolationException – NOT NULL megkötés megsértése.
    • UniqueConstraintViolationException – egyediségi megkötés megsértése.

A következő példa azt mutatja be, hogyan lehet elkapni a UniqueConstraintViolationException, ami akkor fordul elő, amikor olyan felhasználót próbálunk beszúrni egy olyan e-mail címmel, amely már létezik az adatbázisban (feltételezve, hogy a email oszlopnak egyedi indexe van):

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();
}
verzió: 4.0