首页 > 解决方案 > 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 变量有多个数组。它不是一个多维数组。

所以就像

数组 { 等 }

数组 { 等 }

数组 { 等 }

数组 { 等 }

数组 { 等 }

标签: phpmysqlsqldatabase

解决方案


由于您使用的是 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++;
}

推荐阅读