Проблема с обработкой sql-ошибок

В ходе разработки одной фичи, возникла проблема с обработкой ошибки. Текущий обработчик для обработки ошибок не предназначен, а мне нужно поймать ошибку дубликата для уникального ключа. Как можно выкрутиться в данной ситуации?

3 комментария

0
Как-бы решил проблему ручным включением выбрасывания исключений текущим обработчиком sql-ошибок, но чтобы пользоваться этим функционалом (не модифицируя движок), придётся полностью переопределить некоторые методы. Такой подход мне очень не нравится.
0
Да, текущий обработчик предназначен, главным образом, для логгирования. Каких-то дополнительных механизмов для добавления собственных обработчиков нет, но можно использовать стандартные. Например, код в маппере может выглядеть примерно так:
set_error_handler(array($this, 'ErrorHundler'));
$sql = "..."; // Задаем SQL-выражение
$this->oDb-query($sql);
restore_error_handler();
Соответственно в $this->ErrorHundler идет обработка SQL-ошибок.
0

    $cOldErrorHandler = $this->oDb->setErrorHandler(array($this, 'SqlErrorHandler'));
    $bResult = $this->oDb->query(…);
    $this->oDb->setErrorHandler($cOldErrorHandler);
Отредактирован:
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.