У меня ошибка
Неустранимая ошибка: необработанное исключение 'PDOException' с сообщением 'SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: внешний ключограничение не выполнено (gymdatabase
. nutrition
, CONSTRAINT nutrition_ibfk_2
ИНОСТРАННЫЙ КЛЮЧ (food_id
)htdocs \ app \ models \ Nutrition_model.php: 11 Трассировка стека: # 0 G: \ 5-й семестр \ Ecommerce \ xampp \ htdocs \ app \ models \ Nutrition_model.php (11): PDOStatement-> execute (Array) # 1 G:\ 5-й семестр \ Ecommerce \ xampp \ htdocs \ app \ controllers \ Nutrition.php (59): Nutrition_model-> insert () # 2 [внутренняя функция]: Nutrition-> create () # 3 G: \ 5-й семестр \ Ecommerce \xampp \ htdocs \ app \ core \ App.php (38): call_user_func_array (Array, Array) # 4 G: \ 5-й семестр \ Ecommerce \ xampp \ htdocs \ index.php (5): App -> __ construct () # 5{main} брошено в G: \ 5-й семестр \ Ecommerce \ xampp \ htdocs \ app \ models \ Nutrition_model.php в строке 11
Так что есть 2таблицы в моей базе данных.В таблице продуктов есть столбцы food_id, имя, описание, путь.В таблице питания есть столбцы nutrition_id, user_id, food_id.Итак, в таблице питания есть внешний ключ food_id, и у меня пока нет данных в обеих таблицах.Я неоднократно сталкивался с этой ошибкой, но в основном потому, что мой внешний ключ был ограничен для удаления или в таблице уже есть данные, которые нарушают ограничения, но это не так.
public function insert()//for event
{
$stmt = $this->_connection->prepare("INSERT INTO nutrition(user_id, food_id) VALUES(:user_id, :food_id)");
$stmt->execute(['user_id'=>$this->user_id,'food_id'=>$this->food_id]);
return $stmt->rowCount();
}
public function create()
{
if(isset($_POST['nutrition_action']))
{
$nutrition = $this->model('Nutrition_model');
$user_id = $_SESSION['user_id'];
$nutrition->user_id = $user_id;
$gender = $_POST['gender'];
$type = $_POST['type'];
$cheating = $_POST['cheating'];
if($cheating == "Hell Yes")//CH
{
$food = 1;
}
else if($gender == "Male")
{
if($type == "Lose Weight") //ML
{
$food = 4;
}
else if($type == "Maintain Weight") //MM
{
$food = 7;
}
else//MG
{
$food = 10;
}
}
else
{
if($type == "Lose Weight")
{
$food = 0;
}
else if($type == "Maintain Weight")
{
$food = 0;
}
else
{
$food = 0;
}
}
$nutrition->food_id = $food;
$nutrition->insert();
//header('location:/Nutrition/automatic_index');//send somewhere
}
else
{
$this->view('nutrition/nutrition_create');
}
}