所有外键都是'空'

时间:2018-05-01 09:54:53

标签: php mysql database

将数据插入到应该正常工作的表中。然而,当查看表时,我注意到没有任何外键正在工作。这是'Pizza'表,应该从其他表中获取BaseIDToppingID的外键:

Pizza Table

如上图所示,ToppingID为null。而在实际的'PizzaToppings'表中,如下所示,ToppingID是 null:

PizzaToppings Table

目前,整个数据库中的所有外键都会发生这种情况。

然而,这会引发错误:

  

完整性约束违规:1452无法添加或更新子行:   外键约束失败(pizzadeliverypizza,CONSTRAINT   FK_BaseID外键(BaseID)参考pizzabaseBaseID))

1 个答案:

答案 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();
相关问题