php - PHP只插入一次值
问题描述
我正在尝试在数据库中添加类别。事情是脚本正在从产品列表中读取类别,因此存在重复值,就像阅读一样
产品名称 - 详细信息 1 - 详细信息 2 - 类别
冲洗并重复。
我有我的代码,插入工作,但它停止在第一个产品的类别值,就好像我把它放在我的 foreach 循环之外。
<?php
$filecsv = 'pricelist.csv';
$rows = file($filecsv);
foreach($rows as $row){
$c1 = explode('|', $row);
if($c1['6'] == "not available"){
unset($c1);
continue;
}
//echo '<pre>'.print_r($c1[9], true).'</pre>';
$bool = Db::getInstance()->executeS("SELECT CASE WHEN EXISTS (SELECT * FROM b2b_category WHERE name_b2bcategory IN ('".$c1[9]."') ) THEN true ELSE false end");
foreach($bool[0] as $keyB => $valueB){
$verify = $valueB;
$count = 0;
if($valueB != 1){
Db::getInstance()->execute("INSERT INTO b2b_category (id_b2bcategory, name_b2bcategory, position_b2bcategory, active_b2bcategory) VALUES (".$count.", '".$c1[9]."', '0', '0')");
$count++;
//echo '<pre>'.print_r($valueB, true).'</pre>';
}
}
}
?>
我还想指出我的 $c1 变量有多个数组。它不是一个多维数组。
所以就像
数组 { 等 }
数组 { 等 }
数组 { 等 }
数组 { 等 }
数组 { 等 }
解决方案
由于您使用的是 MySQL,因此可以使用on duplicate key update
子句:
Db::getInstance()->execute(
"INSERT INTO b2b_category (id_b2bcategory, name_b2bcategory, position_b2bcategory, active_b2bcategory)
VALUES (".$count.", '".$c1[9]."', '0', '0')
on duplicate key update name_b2bcategory = '".$c1[9]."'"
);
您也可以使用 aselect count(1)
而不是when exists
:
$cnt = Db::getInstance()->executeS("SELECT count(1) FROM b2b_category WHERE name_b2bcategory IN = '".$c1[9]."'");
if($cnt[0] == 0) {
Db::getInstance()->execute("INSERT INTO b2b_category (id_b2bcategory, name_b2bcategory, position_b2bcategory, active_b2bcategory) VALUES (".$count.", '".$c1[9]."', '0', '0')");
$count++;
}
推荐阅读
- django - 自定义验证在 forms.py 中不起作用
- python - 为什么 Python 会复制维度长度相同的 NumPy 数组?
- python - 在合理的时间内比较两个视频
- c# - 远程服务器上的错误“底层连接已关闭:发送时发生意外错误”
- mysql - 替换从具有相同起始字符和结束字符的字符串中删除文本MYSQL
- android - 半谷歌地图在片段中可见
- arrays - Excel公式检索海量数据集的条件sumproduct
- android - 从 Jenkins 上传到 HockeyApp
- math - 优化生产清单顺序
- angular - 如何在不重新加载 Ionic 应用程序的情况下显示更新的个人资料图像