php - 所有外键都是“空”
问题描述
将数据插入到正常工作的表中时。但是,在查看表格时,我注意到没有一个外键起作用。这是应该从其他表中获取外键的“披萨”BaseID
表ToppingID
:
如上图所示,ToppingID 为空。而在实际的“PizzaToppings”表中,如下所示,ToppingID不为空:
目前,我在整个数据库中的所有外键都发生了这种情况。
但是,这会引发以下错误:
完整性约束违规:1452 无法添加或更新子行:外键约束失败 (
pizzadelivery
.pizza
, CONSTRAINTFK_BaseID
FOREIGN KEY (BaseID
) REFERENCESpizzabase
(BaseID
))
解决方案
$toppingID = $stmt -> fetch(PDO::FETCH_ASSOC);
$toppingID
这是一个数组,可能最终绑定为'Array'
最终查询中的字符串,这显然是一个不存在的 ID 并且违反了您的约束(这就是约束所做的,它们确保数据存在于另一个表中)。
您也不想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();
推荐阅读
- r - 将制表符分隔的字符串转换为数据框
- python - python:将符号特征函数的向量转换为评估函数的矩阵
- java - Spring boot CLIENT_PLUGIN_AUTH is required
- unit-testing - Crowdsale OpenZeppelin 合约中的 buyTokens 功能不适用于 msg.value 大于零
- python - Python:加入/合并具有重叠但不同日期索引的数据帧
- python - 将有限的 Laurent 级数(一个 Laurent 多项式)表示为字典
- java - ORA-00932: 不一致的数据类型: 预期 SYS.AQ$_JMS_TEXT_MESSAGE 得到 SYS.AQ$_JMS_TEXT_MESSAGE
- angular - 如何以编程方式单击材质元素?
- javascript - Vue 在数据属性中使用计算的属性值?
- javascript - 将本地文件传递给酱实验室虚拟机进行量角器测试工作