РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
683 of 1392 menu

Исключение QueryException

Исключение QueryException выбрасывается Laravel, когда при выполнении запроса к базе данных происходит ошибка. Это может быть синтаксическая ошибка в SQL-запросе, нарушение ограничений целостности данных, проблемы с подключением к базе данных или другие ошибки, связанные с работой с БД. Исключение содержит информацию о выполнении запроса, включая текст SQL-запроса, параметры и код ошибки.

Синтаксис

<?php use Illuminate\Database\QueryException; try { // Выполнение запроса $users = DB::table('users')->where('id', 1)->first(); } catch (QueryException $e) { // Обработка ошибки $sql = $e->getSql(); $bindings = $e->getBindings(); $code = $e->getCode(); $message = $e->getMessage(); } ?>

Пример

Давайте попробуем выполнить запрос к несуществующей таблице и перехватим исключение:

<?php use Illuminate\Support\Facades\DB; use Illuminate\Database\QueryException; try { $users = DB::table('non_existent_table')->get(); echo "Запрос выполнен успешно"; } catch (QueryException $e) { echo "Ошибка запроса: " . $e->getMessage(); } ?>

Результат выполнения кода:

"Ошибка запроса: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database.non_existent_table' doesn't exist"

Пример

Рассмотрим ситуацию с нарушением уникального ограничения при вставке дублирующихся данных:

<?php use Illuminate\Support\Facades\DB; use Illuminate\Database\QueryException; try { // Попытка вставить пользователя с уже существующим email DB::table('users')->insert([ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => bcrypt('password') ]); echo "Пользователь создан"; } catch (QueryException $e) { echo "Ошибка вставки: " . $e->getMessage(); } ?>

Результат выполнения кода:

"Ошибка вставки: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'john@example.com' for key 'users_email_unique'"

Пример

Получим детальную информацию об ошибке, включая SQL-запрос и параметры:

<?php use Illuminate\Support\Facades\DB; use Illuminate\Database\QueryException; try { $users = DB::table('users')->where('age', '>', 150)->get(); } catch (QueryException $e) { echo "SQL запрос: " . $e->getSql() . "\n"; echo "Параметры: " . implode(', ', $e->getBindings()) . "\n"; echo "Код ошибки: " . $e->getCode() . "\n"; echo "Сообщение: " . $e->getMessage(); } ?>

Результат выполнения кода:

"SQL запрос: select * from `users` where `age` > ? Параметры: 150 Код ошибки: 0 Сообщение: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'age' in 'where clause'"

Пример

Обработаем ошибку с использованием транзакции для сохранения целостности данных:

<?php use Illuminate\Support\Facades\DB; use Illuminate\Database\QueryException; DB::beginTransaction(); try { DB::table('users')->insert([ 'name' => 'Jane Smith', 'email' => 'jane@example.com' ]); DB::table('profiles')->insert([ 'user_id' => 1, 'bio' => 'User bio' ]); DB::commit(); echo "Транзакция успешно выполнена"; } catch (QueryException $e) { DB::rollBack(); echo "Транзакция отменена: " . $e->getMessage(); } ?>

Результат выполнения кода:

"Транзакция отменена: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails"

Смотрите также

  • исключение ModelNotFoundException,
    которое выбрасывается при ненайденной модели
  • исключение MultipleRecordsFoundException,
    которое выбрасывается при обнаружении нескольких записей
  • исключение UniqueConstraintViolationException,
    которое выбрасывается при нарушении уникальности
  • исключение RecordsNotFoundException,
    которое выбрасывается при отсутствии записей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить