recepten
。benodigdheid
,CONSTRAINT benodigdheid_ibfk_1
FOREIGN KEY(ID
)REFERENCES { {1}}(gerecht
))
我理解问题在于子/父关系和外键,但我找不到问题。您是否首先必须在“成分”中添加数据?还是先在'Gerecht'?
下面我写下了部分脚本,如果需要,我可以提供更多。
用于插入新配方的PHP脚本:
ID
创建脚本数据库:
$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";
答案 0 :(得分:0)
插入Gerecht
时,您不会尝试插入Benodigheid
的ID。您必须也插入此值,因为表上存在参照完整性约束。在第一次插入SQL之后,需要读出最后插入的Gerecht
记录的id(可能使用mysqli_insert_id()
,然后在插入到Benodigheid
表中添加该id值。所以$sql2
应如下所示:
$sql2="INSERT INTO Benodigdheid (ID, benodigdheden)
VALUES ($id_from_sql1, '$benodigdheden')";
您的Benodigdheid
表似乎也有缺陷,因为它应该有自己的自动增量主键以及引用Gerecht
的外键。虽然在查看您正在做的事情时,似乎Gerecht
和Benodigheid
之间存在1对1的关系,所以我实际上不知道为什么您不会只有benogdigheid
如果这是您的意图,请作为Gerecht
上的一列。
我通常会查看您的架构,您似乎很清楚您需要将自动增量主键添加到表中(这通常适用于大多数所有关系数据库表)。您将在ingredient
表
答案 1 :(得分:0)
您已将表Benodigdheid的约束从其密钥ID设置为Gerecht中的主键ID。您需要一个单独的外键。您不能拥有主键,外键可以是同一列。 我不明白这些词,所以我不确切知道什么是合适的,但这种约束是一个问题,并给你错误。