问题在数据库中插入数据

时间:2014-10-13 14:23:16

标签: php mysql insert parent-child foreign-key-relationship

我做了一个数据库食谱,它由;食谱名称,身份证号码,成分,准备,图像等。 之后我制作了一个php和html脚本,这样我就可以搜索数据库(例如:晚餐时间不到45分钟)。 不,我正在使用php脚本插入新的食谱。我可以插入$ sql1。但是当我尝试插入$ sql2时,它说: 无法输入数据retval 2:无法添加或更新子行:外键约束失败(receptenbenodigdheid,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";

2 个答案:

答案 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的外键。虽然在查看您正在做的事情时,似乎GerechtBenodigheid之间存在1对1的关系,所以我实际上不知道为什么您不会只有benogdigheid如果这是您的意图,请作为Gerecht上的一列。

我通常会查看您的架构,您似乎很清楚您需要将自动增量主键添加到表中(这通常适用于大多数所有关系数据库表)。您将在ingredient

上遇到同样的问题

答案 1 :(得分:0)

您已将表Benodigdheid的约束从其密钥ID设置为Gerecht中的主键ID。您需要一个单独的外键。您不能拥有主键,外键可以是同一列。 我不明白这些词,所以我不确切知道什么是合适的,但这种约束是一个问题,并给你错误。