我正在尝试制作一个程序来跟踪一些货物集装箱及其中的物品。
表格分为两部分。第一部分询问货物是否是卡车或集装箱以及预计到货日期。此信息存储在DB中,我们称之为shippinginfo。将它添加到DB后,它将获得一个unigue id(int auto inc)。我还检索用于将货物链接到运输信息的ID。
表格的第二部分是货物......就像物品一样 - lotno-qty 而不是写20行我做一个for循环 我们的想法是写下从表格的第一部分检索到的ID(运输信息),然后另一个DB中的货物信息称为cargoDB
在我的insert语句中,我使用for循环来循环插入以将它们添加到数据库中,但这就是#¤%“。
它增加了运输信息,我检索了ID很好,它将货物的第一行添加到货物DB,但无论我做什么,它都不会将其他货物线添加到DB。
我试图将它打印到屏幕只是为了看到循环工作,它打印得很好。
添加到DB的代码是
if($insert_stmt = $mysqli->prepare("INSERT INTO RegisterFPCargo (sID, artNo, lotNo, productionDate, bestbeforeDate, qty) VALUES (?, ?, ?, ?, ?, ?)")) {
for($i = 1; $i <= $NumberofRows ; $i++){
if($_POST['artNo'.$i] <> "") {
$insert_stmt->bind_param('issssi', $tID, $_POST['artNo'.$i], $_POST['lotNo'.$i], $_POST['pDate'.$i], $_POST['bbDate'.$i], $_POST['qty'.$i]);
echo $_POST['artNo'.$i]."<br>"; //Debug
$insert_stmt->execute();
}
}
}
echo $tID;
请帮帮我。
答案 0 :(得分:0)
正如评论中所述,问题是作为主键的列上的重复值。
为了将来参考,execute方法在失败时返回false,您可以通过检查错误消息进行调试。快速而肮脏的方式是:
$mysqli->execute($stmt) or trigger_error($mysqli->error);