PHP: попытка/ошибка перехвата


Я запускаю WAMSERVER 2.4 (32-разрядный) с PHP 5.4.16, это проект Laravel 3.

В блоке try, который, как я ожидаю, завершится неудачей, я отправляю дублирующуюся строку для вставки в соответствии с ограничением уникальности.
Вместо обработки исключения в catch он выдает ошибку "Необработанное исключение" из блока try и завершается ошибкой.

    // This throws an error if the relationship already exists.
    // If that happens, just pass it to the logger and move on.
    try {
        $entity->$pivotMethod()->attach( $rowData->get_key(), $ext );
    } catch (Exception $e) {
        $err = $e->getMessage()."\n";
        error_log($err);
    }

Вот ошибка, которую он выдает: Необработанное исключение

Сообщение:

СОСТОЯНИЕ SQLSTATE[23000]: Нарушение ограничения целостности: 1062 повторяющихся записей '695d7f0b-53b8-11e3-93fc-c12677e410a5-0-0-14- "для ключа "уникальный"

SQL: ВСТАВИТЬ В person_contact (person_uuid,phone_id) ЦЕННОСТИ (?, ?)
Привязки: массив(0=> '695d7f0b-53b8-11e3-93fc-c12677e410a5', 1 => 14)

Местоположение: C:\path\to\laravel\3_2_13\database\connection.php в строке 263

Author: mOrloff, 2014-01-06

1 answers

Основываясь на вашем комментарии, вот ваша проблема

namespace Something;

class myClass {

    function method() {
          try {
        $entity->$pivotMethod()->attach( $rowData->get_key(), $ext );
       } catch (Exception $e) {
        $err = $e->getMessage()."\n";
        error_log($err);
       }
    }
}

В этом случае вы печатаете, что вы улавливаете исключение, но не указываете область действия, поэтому PHP предполагает, что вы улавливаете \Something\Exception

Решение довольно простое. Добавление \ указывает PHP перехватывать все, что является или расширяет базовый класс Exception

catch (\Exception $e)
 7
Author: Machavity, 2014-01-06 18:50:49