完整性约束冲突:上次插入调用时1452 php mysql web应用程序崩溃
我的POS系统php web应用程序有一个令人沮丧的问题。为了简短起见,我只将错误包括在内 MySQL数据库由一个完整性约束冲突:上次插入调用时1452 php mysql web应用程序崩溃,php,mysql,Php,Mysql,我的POS系统php web应用程序有一个令人沮丧的问题。为了简短起见,我只将错误包括在内 MySQL数据库由一个客户、订单、和订单行表组成(您需要知道的关于我得到的错误的所有信息)。当我运行下面的PHP脚本时,它在一行出现错误注释时崩溃。我的customer表有一个名为customerid的自动递增主键,这就是为什么在插入到orderline时,由于前面的插入,我的主键为1 require 'connect.php'; $pdo = Database::connect(); $pdo->
客户
、订单
、和订单行
表组成(您需要知道的关于我得到的错误的所有信息)。当我运行下面的PHP脚本时,它在一行出现错误注释时崩溃。我的customer表有一个名为customerid的自动递增主键,这就是为什么在插入到orderline时,由于前面的插入,我的主键为1
require 'connect.php';
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO customer (customerid, fname, lname)
VALUES (123456789, 'Dan', 'Dentin')";
$pdo->exec($sql);
$dt = new DateTime();
$dt = $dt->format('Y-m-d H:i:s');
$sql = "INSERT INTO `order` (date, customerid)
VALUES ('$dt', 123456789)";
$pdo->exec($sql);
$sql = "INSERT INTO orderline (orderid, sprice, `status`)
VALUES (1, 5647, 'PAID')";
$pdo->exec($sql); //ERROR IT CRASHES HERE ON MY LAST INSERT CALL
错误显示:
完整性约束冲突:1452无法添加或更新子行:外键约束失败外键(orderid
)引用order
(customerid
)关于删除没有操作关于更新没有操作)
我很困惑为什么我不能插入我的订单行信息,如果需要更多信息,请这样说 错误消息中的外键(orderid)引用订单(customerid)
表示您将orderline.orderid
字段与order.customerid
字段关联。这导致mysql试图将1
与123456789
匹配,从而产生您描述的错误
您应该将外键更改为与
order
表中的id
字段相关(无论order
表中主键的名称是什么).您如何知道新插入的订单的ID为1?您似乎还将orderline表中的orderid字段与order表中的customer ID字段相关联。@ThomasWeller我知道它的ID为1,因为order表为空,这是第一个条目,然后是order表的自动递增主键将是1,因为它是第一个条目。@CP\n但不一定是这样。即使表为空,自动增量值也可能与1不同。@执行脚本之前,我确保截断订单表,使其始终从1开始。我认为这是正确的,目前正在尝试修复我的数据库创建脚本。这是正确的答案,非常感谢你们,我现在明白了,我不应该依赖我的ER图中的MySQL工作台正向工程。