Exceptions
Nette Database uses an exception hierarchy. The base class is Nette\Database\DriverException, which extends
PDOException and provides enhanced functionality for working with database errors:
- The
getDriverCode()method returns the error code from the database driver. - The
getSqlState()method returns the SQLSTATE code. - The
getQueryString()andgetParameters()methods allow retrieving the original query and its parameters.
The DriverException class is extended by the following specialized exceptions:
ConnectionException– indicates a failure to connect to the database server.ConstraintViolationException– the base class for database constraint violations, from which the following exceptions inherit:ForeignKeyConstraintViolationException– violation of a foreign key constraint.NotNullConstraintViolationException– violation of a NOT NULL constraint.UniqueConstraintViolationException– violation of a uniqueness constraint.
The following example demonstrates how to catch a UniqueConstraintViolationException, which occurs when trying to
insert a user with an email that already exists in the database (assuming the email column has a unique index):
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();
}