【问题标题】:Mysqli insert fails when using for loop [duplicate]使用for循环时Mysqli插入失败[重复]
【发布时间】:2017-02-03 02:41:46
【问题描述】:

我正在尝试制作一个程序来跟踪一些货物集装箱及其中的物品。

表格分为两部分。第一部分询问货物是否是卡车或集装箱以及预计到达日期。此信息存储在数据库中,我们称之为 shippinginfo。将其添加到数据库后,它会获得一个唯一的 id(int auto inc)。我还检索了用于将货物链接到运输信息的 ID。

表格的第二部分是货物.. like article-lotno-qty 而不是写 20 行我做一个 for 循环 这个想法是写从表单的第一部分(运输信息)检索到的 ID,然后在另一个数据库中的货物信息我们称之为 cargoDB

在我的插入语句中,我使用 for 循环循环插入插入以将它们添加到数据库中,但这就是#¤%"。

它很好地添加了运输信息,我很好地检索了 id,它将货物的第一行添加到货物数据库中,但无论我做什么,它都不会将其他货物行添加到数据库中。

我尝试将其打印到屏幕上只是为了查看循环是否正常,并且打印效果很好。

添加到数据库的代码是

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;

请帮帮我。

【问题讨论】:

  • echo $_POST['artNo'.$i]."&lt;br&gt;"; //Debug 这不是“调试”的方式。获取真正的错误php.net/manual/en/mysqli.error.php --- php.net/manual/en/function.error-reporting.php
  • 这只是为了看看 for 循环是否有效......它将所有货物行打印到屏幕上,但它只将第一个货物行写入数据库。编辑:我在 one.com 虚拟主机上并且有错误报告,但它没有说明任何错误。
  • 表上是否有主键或唯一索引?你能运行desc RegisterFPCargo; 查询并显示结果吗
  • 使用echo $insert_stmt-&gt;sqlstate; 调试mysqli_stmt,甚至转储整个对象,看看是否有帮助。也许每个准备好的查询只能绑定一次?
  • 知道你是如何设置的会很有用$NumberofRows 记住我们不是千里眼

标签: php sql for-loop mysqli


【解决方案1】:

如 cmets 中所述,问题是作为主键的列上的重复值。

为了将来参考,execute 方法在失败时返回 false,您可以通过检查错误消息进行调试。快速而肮脏的方法是:

$mysqli->execute($stmt) or trigger_error($mysqli->error);

【讨论】:

    猜你喜欢
    • 2020-05-17
    • 2013-04-28
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2015-11-28
    • 2015-02-13
    相关资源
    最近更新 更多