我的POS系统php web应用程序遇到了令人沮丧的问题。我只会包含错误以保持简短。
MySQL数据库由customer
,order
和orderline
表组成(您需要知道的所有错误)。当我运行下面的PHP脚本时,它会在注释中显示ERROR的行崩溃。我的客户表有一个名为customerid的自动增量PK,这就是为什么我因插入前一个插入而在插入订单行时有一个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无法添加或更新子行:外键约束失败FOREIGN KEY(
orderid
)REFERENCESorder
(customerid
)ON DELETE NO ACTION ON UPDATE NO行动)
我很困惑为什么我不能插入我的订单信息,如果需要更多信息请说明。
答案 0 :(得分:2)
错误消息中的> head(as.data.frame(theData))
X1 X2 X3 X4 X5 X6 X7
1 0.86096810 0.2323373 0.9913265 0.8533702 0.09094279 0.54396940 0.87441769
2 0.09762566 0.9126343 0.4528663 0.9223295 0.02801973 0.11576152 0.64557643
3 0.82491603 0.4988662 0.8027047 0.8490365 0.01687182 0.38767569 0.67800481
4 0.82016269 0.5148852 0.2248160 0.8339404 0.49346620 0.07940575 0.08192492
5 0.34181443 0.3943045 0.2749949 0.9736331 0.76965589 0.30493388 0.82205653
6 0.83387527 0.5539088 0.2977256 0.7804322 0.61297012 0.74456391 0.88700870
X8 X9 X10
1 0.01152920 0.83665797 0.63328141
2 0.66086545 0.65325452 0.30709237
3 0.89277291 0.08738481 0.71723959
4 0.01893088 0.87709515 0.32186587
5 0.80091302 0.09594028 0.88764437
6 0.02912132 0.29151880 0.06874472
>
表示您将FOREIGN KEY (orderid) REFERENCES order (customerid)
字段与orderline.orderid
字段相关联。这会导致mysql尝试将order.customerid
与1
匹配,从而产生您所描述的错误。
您应该更改外键以与123456789
表中的id
字段相关联(无论order
表中主键的名称是什么)。