public function handleExecutionException(\Exception
$exception, StatementInterface
$statement, array
$arguments =
[], array
$options =
[]): void
{ 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.
$code =
is_int($exception->
getCode()) ?
$exception->
getCode() : 0;
// If a max_allowed_packet error occurs the message length is truncated.
// This should prevent the error from recurring if the exception is logged
// to the database using dblog or the like.
if (($exception->errorInfo
[1
] ?? NULL
) === 1153
) { $message = Unicode::
truncateBytes($exception->
getMessage(), Connection::MIN_MAX_ALLOWED_PACKET
);
throw new DatabaseExceptionWrapper($message,
$code,
$exception);
} $message =
$exception->
getMessage() . ": " .
$statement->
getQueryString() . "; " .
print_r($arguments, TRUE
);
// SQLSTATE 23xxx errors indicate an integrity constraint violation. Also,
// in case of attempted INSERT of a record with an undefined column and no
// default value indicated in schema, MySql returns a 1364 error code.
if ( substr($exception->
getCode(), -6, -3
) == '23'
|| ($exception->errorInfo
[1
] ?? NULL
) === 1364
)