php - 使用 foreach 循环插入 MySQL 表中的重复记录集

标签 php mysql arrays foreach

我不明白为什么 foreach 循环的迭代次数超过了元素的计数。

该函数传递两个关联数组:表单数据和特许经营数据。表单数据元素被转换为变量。我想遍历特许经营数组(长度未知)并为每个唯一的特许经营 ID 插入表单数据。每条记录将包含相同的表单数据(来自用户),但 franchise_id、franchisor_id 和 franchise_name 字段的数据不同。

发生的情况是,如果选择一个特许经营权,则会插入两条相同的记录。如果有两个,则总共插入四个(两个重复)。但是,如果选择了三个,它会插入九行(三个选项中的三组)。这一点,尽管数组计数为 3。

我修改代码无数次都没有成功。

函数如下:

public static function setLeadData($franchises, $formData)
{

    $first_name    = $formData[0]['value'];
    $last_name     = $formData[1]['value'];
    $telephone     = $formData[2]['value'];
    $email         = $formData[3]['value'];
    $zipcode       = $formData[4]['value'];
    $networth      = $formData[5]['value'];
    $liquidcapital = $formData[6]['value'];
    $message       = $formData[7]['value'];

    try
    {
        $db = static::getDB();

        $sql = "INSERT INTO leads_franchises SET
                franchise_id    = :franchise_id,
                franchisor_id   = :franchisor_id,
                franchise_name  = :franchise_name,
                first_name      = :first_name,
                last_name       = :last_name,
                telephone       = :telephone,
                email           = :email,
                zipcode         = :zipcode,
                networth        = :networth,
                liquidcapital   = :liquidcapital,
                message         = :message";
        $stmt = $db->prepare($sql);

        foreach($franchises as $franchise)
        {
            $parameters = [
                ':franchise_id'   => $franchise['franchise_id'],
                ':franchisor_id'  => $franchise['franchisor_id'],
                ':franchise_name' => $franchise['franchise_name'],
                ':first_name'     => $first_name,
                ':last_name'      => $last_name,
                ':telephone'      => $telephone,
                ':email'          => $email,
                ':zipcode'        => $zipcode,
                ':networth'       => $networth,
                ':liquidcapital'  => $liquidcapital,
                ':message'        => $message
            ];

            $result = $stmt->execute($parameters);
        }

        return $result;
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
        exit();
    }
}

这是具有三个选择的 franchise[]:

[0] => Array
    (
        [franchise_id] => 2
        [franchisor_id] => 3
        [franchise_name] => Franchise One
        [logo] => image2.jpg
        [logo_thumb] => thumb_image2.jpg
        [min_capital] => 200000
        [description] => description
        [website] => example2.com
        [inquiry_email] => info@gmail.com
        [created_at] => 2018-01-17 13:05:51
        [updated_at] => 2018-01-25 17:09:51
    )

[1] => Array
    (
        [franchise_id] => 3
        [franchisor_id] => 3
        [franchise_name] => Franchise Two
        [logo] => image3.jpg
        [logo_thumb] => thumb_image3.jpg
        [min_capital] => 100000
        [description] => description
        [website] => example3.com
        [inquiry_email] => info@gmail.com
        [created_at] => 2018-01-21 18:03:39
        [updated_at] => 2018-01-25 17:10:02
    )

[2] => Array
    (
        [franchise_id] => 4
        [franchisor_id] => 3
        [franchise_name] => Franchise Three
        [logo] => image4.jpg
        [logo_thumb] => thumb_image4.jpg
        [min_capital] => 100000
        [description] => description
        [website] => example4.com
        [inquiry_email] => info@gmail.com
        [created_at] => 2018-01-25 10:25:52
        [updated_at] => 2018-01-25 17:58:08
    )

如果有人能看到我的代码或方法中的错误,我将不胜感激。

最佳答案

添加:

 $stmt->reset();

到这一行之后的循环结束:

$result = $stmt->execute($parameters);

关于php - 使用 foreach 循环插入 MySQL 表中的重复记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478405/

相关文章:

php - Magento soap api catalog_product.list 分页

php - 如何每 X 分钟运行一次 cronjob?

php - libxml 常量是可访问的,但不要注册为定义的常量

sql - MySQL - 在查询中将用户用户名映射到用户 ID

c - 将 13 位数组合并为 unsigned char 数组

php - 使用增量日期和天数插入 PHP 中的 SQL 数据库

SQLite3(或通用 SQL)检索查询结果的第 n 行

mysql - 时间戳未在 mysql 中转换

java - 如何获取字节数组中的元素数量?

java - 如何在填充数组时终止java中的扫描器