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
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)