Задать вопрос
@Alk90
php, mysql, jquery, css, html, api

Можно ли доверять коду ошибки Mysql?

Всем привет! Если у таблицы posts есть связь с таблицей users через поле user_id => id и происходит вставка в таблицу posts где поле user_id содержит значение 3, а при этом в таблице users такого id нет. То Mysql возвращает ошибку с номером 1452.
Можно ли доверять этому номеру и быть уверенным что он не изменится при той же ситуации позже и сделать проверку
if($db->errno === 1452){
   throw new Exception("Такого пользователя не существует");
}


Или перед вставкой нужно создать запрос на проверку существования такой записи в связующей таблице?
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
Server Error Message Reference

Error number: 1452; Symbol: ER_NO_REFERENCED_ROW_2; SQLSTATE: 23000

Message: Cannot add or update a child row: a foreign key constraint fails (%s)

InnoDB reports this error when you try to add a row but there is no parent row, and a foreign key constraint fails. Add the parent row first.

Данная ошибка всегда порождается событием неудачной проверки ограничения ссылочной целостности. Так что можете смело доверять причине.

Или перед вставкой нужно создать запрос на проверку существования такой записи в связующей таблице?

А вот задайте себе вопрос - откуда возьмётся то самое значение user_id = 3, которое Вы собираетесь вставить? я не вижу иного способа получить данное значение кроме как сделать запрос в родительскую таблицу. А коли из неё вернётся нужное значение - то запись, из которой взято это значение, совершенно очевидно в таблице есть.
Ответ написан
Stalker_RED
@Stalker_RED
Коды ошибок могут перестать использоваться в новых версиях, иногда добавляются новые, но значения обычно не меняют.

Но вообще, обычно так не делают. Сама ситуация, что у вас появился откуда-то пост с несуществующим user_id - довольно странная. Откуда в приложении может взяться неправильный user_id?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы