Прежде всего, вы отбрасываете ответ на запрос к вашей базе данных.
Вы должны захватить это и действовать соответственно.mysqli_stmt::execute()
возвращает true
в случае успеха и false
в случае ошибки.Если это не удастся, вы, вероятно, должны что-то сделать с его error()
.Это позволит вам избежать «моей страницы просто обновляется», показывая сообщение об ошибке, чтобы объяснить, что происходит.
Во-вторых, ваша база данных защищает вас.Он хочет, чтобы ваши данные были правильно сформированы, и если вы удаляете запись, на которую ссылается другая запись, она не знает, что должна делать.Самое безопасное, и во многих случаях действительно правильное, - это отказаться от удаления указанной записи.
Однако вы можете изменить это поведение.Когда вы добавляете свое ограничение , вы можете предоставить предложение ON DELETE
, например,
ALTER TABLE item
ADD CONSTRAINT restaurant_fk
FOREIGN KEY (rest_id)
REFERENCES restaurant(id)
ON DELETE CASCADE;
Здесь ON DELETE CASCADE
сообщает вашей базе данных, что она должна удалить item
s при их соответствующем restaurant
s удалены.
Вам нужно будет удалить старое ограничение, прежде чем добавить это.Это зависит от того, как он настроен в данный момент, но что-то вроде
ALTER TABLE item
DROP FOREIGN KEY whatever_its_name_is;
должно сработать.