将数据插入到应该正常工作的表中。然而,当查看表时,我注意到没有任何外键正在工作。这是'Pizza'表,应该从其他表中获取BaseID
和ToppingID
的外键:
如上图所示,ToppingID为null。而在实际的'PizzaToppings'表中,如下所示,ToppingID是不 null:
目前,整个数据库中的所有外键都会发生这种情况。
然而,这会引发错误:
完整性约束违规:1452无法添加或更新子行: 外键约束失败(
pizzadelivery
。pizza
,CONSTRAINTFK_BaseID
外键(BaseID
)参考pizzabase
(BaseID
))
答案 0 :(得分:1)
$toppingID = $stmt -> fetch(PDO::FETCH_ASSOC);
$toppingID
这里是一个数组,可能最终以最终查询中的字符串'Array'
绑定,这显然是一个不存在的ID并且违反了您的约束(这是什么约束do,他们确保数据存在于另一个表中)。
您也不想使用MAX()
来获取ID;不保证新ID在列中具有最高编号,并且如果您并行执行多个查询,则不会对竞争条件造成安全。您想要的是获取最后一次插入ID :
$stmt = $pdo->prepare('INSERT INTO PizzaToppings ...');
...
$stmt->execute();
$toppingId = $pdo->lastInsertId();
$stmt = $pdo->prepare('INSERT INTO PizzaBase ...');
...
$stmt->execute();
$baseId = $pdo->lastInsertId();
$stmt = $pdo->prepare('INSERT INTO Pizza (..., ToppingID, BaseID) VALUES (..., :ToppingID, :BaseID)');
...
$stmt->bindParam(':ToppingID',$toppingId);
$stmt->bindParam(':BaseID',$baseId);
$stmt->execute();