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 agetParameters()
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();
}