我不明白为什么 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/