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