class ExceptionHandler in Drupal 9
Same name in this branch
- 9 core/lib/Drupal/Core/Database/ExceptionHandler.php \Drupal\Core\Database\ExceptionHandler
- 9 core/lib/Drupal/Core/Database/Driver/mysql/ExceptionHandler.php \Drupal\Core\Database\Driver\mysql\ExceptionHandler
- 9 core/tests/fixtures/database_drivers/module/corefake/src/Driver/Database/corefakeWithAllCustomClasses/ExceptionHandler.php \Drupal\corefake\Driver\Database\corefakeWithAllCustomClasses\ExceptionHandler
Base Database exception handler class.
This class handles exceptions thrown by the database layer. Database driver implementation can provide an alternative implementation to support special handling required by that database.
Hierarchy
- class \Drupal\Core\Database\ExceptionHandler
Expanded class hierarchy of ExceptionHandler
2 files declare their use of ExceptionHandler
- ExceptionHandler.php in core/
lib/ Drupal/ Core/ Database/ Driver/ mysql/ ExceptionHandler.php - ExceptionHandler.php in core/
tests/ fixtures/ database_drivers/ module/ corefake/ src/ Driver/ Database/ corefakeWithAllCustomClasses/ ExceptionHandler.php
3 string references to 'ExceptionHandler'
- Connection::exceptionHandler in core/
lib/ Drupal/ Core/ Database/ Connection.php - Returns the database exceptions handler.
- Connection::getDriverClass in core/
lib/ Drupal/ Core/ Database/ Connection.php - Gets the driver-specific override class if any for the specified class.
- ConnectionTest::providerGetDriverClass in core/
tests/ Drupal/ Tests/ Core/ Database/ ConnectionTest.php - Data provider for testGetDriverClass().
File
- core/
lib/ Drupal/ Core/ Database/ ExceptionHandler.php, line 12
Namespace
Drupal\Core\DatabaseView source
class ExceptionHandler {
/**
* Handles exceptions thrown during the preparation of statement objects.
*
* @param \Exception $exception
* The exception to be handled.
* @param string $sql
* The SQL statement that was requested to be prepared.
* @param array $options
* An associative array of options to control how the database operation is
* run.
*
* @throws \Drupal\Core\Database\DatabaseExceptionWrapper
*/
public function handleStatementException(\Exception $exception, string $sql, array $options = []) : void {
if (array_key_exists('throw_exception', $options)) {
@trigger_error('Passing a \'throw_exception\' option to ' . __METHOD__ . ' is deprecated in drupal:9.2.0 and is removed in drupal:10.0.0. Always catch exceptions. See https://www.drupal.org/node/3201187', E_USER_DEPRECATED);
if (!$options['throw_exception']) {
return;
}
}
if ($exception instanceof \PDOException) {
// Wrap the exception in another exception, because PHP does not allow
// overriding Exception::getMessage(). Its message is the extra database
// debug information.
$message = $exception
->getMessage() . ": " . $sql . "; ";
throw new DatabaseExceptionWrapper($message, 0, $exception);
}
throw $exception;
}
/**
* Handles exceptions thrown during execution of statement objects.
*
* @param \Exception $exception
* The exception to be handled.
* @param \Drupal\Core\Database\StatementInterface $statement
* The statement object requested to be executed.
* @param array $arguments
* An array of arguments for the prepared statement.
* @param array $options
* An associative array of options to control how the database operation is
* run.
*
* @throws \Drupal\Core\Database\DatabaseExceptionWrapper
* @throws \Drupal\Core\Database\IntegrityConstraintViolationException
*/
public function handleExecutionException(\Exception $exception, StatementInterface $statement, array $arguments = [], array $options = []) : void {
if (array_key_exists('throw_exception', $options)) {
@trigger_error('Passing a \'throw_exception\' option to ' . __METHOD__ . ' is deprecated in drupal:9.2.0 and is removed in drupal:10.0.0. Always catch exceptions. See https://www.drupal.org/node/3201187', E_USER_DEPRECATED);
if (!$options['throw_exception']) {
return;
}
}
if ($exception instanceof \PDOException) {
// Wrap the exception in another exception, because PHP does not allow
// overriding Exception::getMessage(). Its message is the extra database
// debug information.
$message = $exception
->getMessage() . ": " . $statement
->getQueryString() . "; " . print_r($arguments, TRUE);
// Match all SQLSTATE 23xxx errors.
if (substr($exception
->getCode(), -6, -3) == '23') {
throw new IntegrityConstraintViolationException($message, $exception
->getCode(), $exception);
}
throw new DatabaseExceptionWrapper($message, 0, $exception);
}
throw $exception;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ExceptionHandler:: |
public | function | Handles exceptions thrown during execution of statement objects. | 1 |
ExceptionHandler:: |
public | function | Handles exceptions thrown during the preparation of statement objects. |