Проблемы с вставкой данных в базу данных

Я сделал базу данных рецептов, она состоит из; название рецепта, идентификационный номер, ингредиенты, подготовка, изображение и т. д.
После этого я создал скрипт php и html, чтобы можно было искать в данных (например: ужин с подготовкой менее 45 минут).
Нет, я работаю над сценарием php для вставки новых рецептов. Я могу вставить $ sql1. Но когда я пытаюсь вставить $ sql2, он говорит:
Не удалось ввести данные Retval 2: Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (recepten,benodigdheid, ОГРАНИЧЕНИЕ benodigdheid_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (ID) РЕКОМЕНДАЦИИ gerecht (ID))
Я понимаю, что проблема связана с отношением ребенок / родитель и внешним ключом, но я не могу найти проблему. Вам сначала нужно добавить данные в «Ингредиент»? Или сначала в «Герехте»?
Ниже я записал часть сценария, я могу дать больше, если потребуется.

PHP скрипт для вставки нового рецепта:

$sql1="INSERT INTO Gerecht ( gerechtnaam, personen, categorie, bereidingstijd, bereidingswijze, plaatje)
VALUES ('$gerechtnaam','$personen','$categorie','$bereidingstijd','$bereidingswijze','$plaatje')";
$sql2="INSERT INTO Benodigdheid (benodigdheden)
VALUES ('$benodigdheden')";
$sql3="INSERT INTO Product (ingredientnaam, eenheidnaam)
VALUES ('$ingredientnaam1', '$eenheid1')";
$sql4="INSERT INTO Ingredient (ingredientnaam, hoeveelheid)
VALUES ('$ingredientnaam1', '$hoeveelheid1')";

$retval1 = mysqli_query($db, $sql4 );
if(! $retval1 )
{
die('Could not enter data retval 1: ' . mysqli_error($db));
}
echo "Entered data retval1 successfully\n";

$retval2 = mysqli_query($db, $sql2 );
if(! $retval3 )
{
die('Could not enter data retval 2: ' . mysqli_error($db));
}
echo "Entered data retval2 successfully\n";

Создать базу данных скриптов:

  CREATE TABLE Gerecht
(ID      INT(3)   AUTO_INCREMENT     NOT NULL,
gerechtnaam     VARCHAR(35)    NOT NULL,
personen  NUMERIC(2)    NOT NULL,
categorie  VARCHAR(25)  NOT NULL,
bereidingstijd  NUMERIC(3)     NOT NULL,
bereidingswijze   TEXT   NOT NULL,
plaatje      VARCHAR(250)      NOT NULL,
PRIMARY KEY (ID)
);

CREATE TABLE Benodigdheid
(ID    INT(3)    NOT NULL,
benodigdheden     VARCHAR(35)   NOT NULL,
PRIMARY KEY (ID, benodigdheden),
FOREIGN KEY (ID) REFERENCES Gerecht (ID)
);

CREATE TABLE Eenheid
(eenheidnaam     VARCHAR(12)    NOT NULL,
PRIMARY KEY (eenheidnaam)
);

CREATE TABLE Product
(ingredientnaam     VARCHAR(35)    NOT NULL,
eenheidnaam     VARCHAR(12),
PRIMARY KEY (ingredientnaam),
FOREIGN KEY (eenheidnaam) REFERENCES Eenheid (eenheidnaam)
);

CREATE TABLE Ingredient
(ID    INT(3)       NOT NULL,
ingredientnaam     VARCHAR(35)    NOT NULL,
hoeveelheid      NUMERIC(4)    NOT NULL,
PRIMARY KEY (ID, ingredientnaam),
FOREIGN KEY (ID) REFERENCES Gerecht (ID),
FOREIGN KEY (ingredientnaam) REFERENCES Product (ingredientnaam)
);

0

Решение

Вы не пытаетесь вставить идентификатор Gerecht при вставке в Benodigheid, Вы ДОЛЖНЫ также вставить это значение, поскольку в таблице есть ограничение ссылочной целостности. После первой вставки SQL необходимо прочитать идентификатор последней вставленной Gerecht запись (возможно, с помощью mysqli_insert_id() а затем добавить это значение идентификатора в вставке в Benodigheid Таблица. Так $sql2 должен выглядеть так:

$sql2="INSERT INTO Benodigdheid (ID, benodigdheden)
VALUES ($id_from_sql1, '$benodigdheden')";

Ваш Benodigdheid Таблица также кажется ошибочной в том, что она должна иметь свой собственный первичный ключ автоинкремента, а также ссылку на внешний ключ Gerecht, Хотя, глядя на то, что вы делаете, кажется, что между отношениями 1: 1 Gerecht а также Benodigheidтак что я на самом деле не знаю, почему у вас не было бы просто benogdigheid как столбец на Gerecht если это ваше намерение.

В целом, просматривая вашу схему, мне кажется, что вам нужно попрактиковаться в добавлении первичных ключей автоинкремента к вашим таблицам (что обычно делается для большинства всех таблиц реляционных БД). Вы будете иметь ту же проблему на вашем ingredient таблицы

0

Другие решения

Вы установили ограничение для таблицы Benodigdheid от ее идентификатора ключа до идентификатора первичного ключа в Gerecht. Вам нужен отдельный внешний ключ. Вы не можете иметь первичный ключ и внешний ключ в одном столбце.
Я не понимаю слов, поэтому не знаю точно, что и к чему, но это ограничение является проблемой и дает вам ошибку.

0

По вопросам рекламы [email protected]