Foreach循环内的SQL查询仅运行一次-PHP

时间:2019-11-15 13:56:38

标签: php mysql loops foreach

我正在foreach循环中运行查询,但是由于某种原因它只运行一次。我正在遍历具有多个值的数组,并且我希望运行与该数组具有值的次数相同的查询。

    if (isset($_SESSION['dd']) && is_array($_SESSION['dd'])) {

    $sql  = "INSERT INTO rma_report (message, cus_id, acceptance) VALUES ('$cus_comment', '$cus_id', 3)";

    if ($db->query($sql) === TRUE) {

        foreach ($_SESSION['devices_id'] as $dev) {

            $last_id = $db->insert_id;

            $lastId = $last_id;

            $sql2 = "INSERT INTO rma_device_list (rma_id, device_id) VALUES ('$lastId','$dev')";

            if (mysqli_query($db, $sql2)) {
                unset($_SESSION['device_id']);
                exit;
            } else {
                echo "Error: " . $sql2 . "<br>" . mysqli_error($db);
            }

        }
    }
}

4 个答案:

答案 0 :(得分:1)

从您的代码中删除numRowsI。在getRange

之后

答案 1 :(得分:0)

因为您的set_a = set(a) TypeError: unhashable type: 'dict' 必须只有一个值。这就是为什么它运行一次的原因。

打印并检查$_SESSION['devices_id']

可能是$_SESSION['devices_id']语句负责删除值,这就是循环运行一次的原因。

答案 2 :(得分:0)

就像您尝试插入具有相同ID的记录一样:

$lastId = $last_id;

应为:

$lastId = $last_id + 1;

答案 3 :(得分:-1)

以下代码避免两个代码坑。

  • 取消设置$ _SESSION ['device_id'] [$ idDev]而不是$ _SESSION ['devices_id']
  • 仅在出现错误的情况下退出。

    if (isset($_SESSION['dd']) && is_array($_SESSION['dd'])) {
    
        $sql  = "INSERT INTO rma_report (message, cus_id, acceptance) VALUES ('$cus_comment', '$cus_id', 3)";
    
        if ($db->query($sql) === TRUE) {
    
            foreach ($_SESSION['devices_id'] as $idDev => $dev) {
    
                $last_id = $db->insert_id;
    
                $lastId = $last_id;
    
                $sql2 = "INSERT INTO rma_device_list (rma_id, device_id) VALUES ('$lastId','$dev')";
    
                if (mysqli_query($db, $sql2)) {
                    unset($_SESSION['device_id'][$idDev]);
    
                } else {
                    echo "Error: " . $sql2 . "<br>" . mysqli_error($db);
                    exit;
                }
    
            }
        }
    }