所有外键都为“null”

izj3ouym  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(328)

在将数据插入到表中时,它应该正常工作。然而,当我看表时,我注意到外键都不起作用。这是“比萨饼”桌,应该是外键的 BaseID 以及 ToppingID 从其他表格中:

如上图所示,toppingid为空。而在如下所示的实际“pizzatoppings”表中,toppingid不为空:

这是目前发生在所有我的外键在整个数据库。
但是,这会引发以下错误:
完整性约束冲突:1452无法添加或更新子行:外键约束失败( pizzadelivery . pizza ,约束 FK_BaseID 外键( BaseID )参考文献 pizzabase ( BaseID ))

uurity8g

uurity8g1#

$toppingID = $stmt -> fetch(PDO::FETCH_ASSOC);
``` `$toppingID` 这是一个数组,可能最终绑定为字符串 `'Array'` 在您的最终查询中,这显然是一个不存在的id并且违反了您的约束(约束就是这样做的,它们确保数据出现在另一个表中)。
你也不想用 `MAX()` 获取身份证;不能保证新的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();

相关问题