Php 如果第一列具有相同的值,则更新第二列

Php 如果第一列具有相同的值,则更新第二列,php,Php,我导入CSV并将值保存在数据库中,然后显示在php页面中 CSV php页面 要求: 现在,当我导入另一个CSV时,如果第一列[AWB]的值相同[已经存在于DB中],那么我要更新CSV的第二列 问题: 但现在,它不是导入,只是跳过 if(isset($_POST["Import"])){ $filename=$_FILES["file"]["tmp_name"]; if($_FILES["file"]["size"] > 0)

我导入CSV并将值保存在数据库中,然后显示在php页面中

CSV

php页面

要求

现在,当我导入另一个CSV时,如果第一列[AWB]的值相同[已经存在于DB中],那么我要更新CSV的第二列

问题:

但现在,它不是导入,只是跳过

if(isset($_POST["Import"])){

         $filename=$_FILES["file"]["tmp_name"];     

         if($_FILES["file"]["size"] > 0)
         {
            $file = fopen($filename, "r");
            $i=0;
            while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
             {

                $getData = array_map("utf8_encode", $getData); 

                if($i==0){$i++;continue;}


                $sql = "INSERT into do_order (tracking_id,
                order_id                    
                ) 

                   values ('".mysqli_real_escape_string($conn , $getData[0])."',
                   '".mysqli_real_escape_string($conn , $getData[1])."'                
                   )";

                  // print $sql;
                  // die(); 
                   $result=$db_handle->executeUpdate($sql);
                  // print_r($db_handle->errorInfo());

                if(!isset($result))
                {
                    echo "";        
                }
                else {
                      echo "";
                }
                $i++;
             }

             fclose($file); 
         }
    }    
echo "";

有两种方法可以做到这一点

您可以通过
SELECT*FROM do\u order WHERE tracking\u id='puthere yourtracking valuefromCVS'
检查
awb
(跟踪id)的存在,如果行数>0,则在tracking\u id='puthere yourtracking valuefromCVS'处执行
UPDATE do\u order SET order\u id='PutYourNewOrderIdFromCvs'

或者,您可以通过执行

ALTER TABLE do_order ADD UNIQUE (`tracking_id`);
然后每次插入

$sql = "INSERT into do_order (tracking_id,order_id) values 
      ('".mysqli_real_escape_string($conn , $getData[0])."','".
          mysqli_real_escape_string($conn , $getData[1])."') 
          ON DUPLICATE KEY UPDATE order_id = '".mysqli_real_escape_string($conn , $getData[1])."'";

重要注意事项不要使用mysqli*,即使必须使用

也可以使用
更新
而不是
插入
,或者,如果你想变得有趣,也可以使用
插入。。。在重复密钥更新时
如果AWB列是您的主键BTW,您应该使用准备好的语句而不是这个
mysqli\u real\u escpape\u字符串
的东西,这样可以更容易地理解您的SQL,并更好地防范SQLinjection@KarstenKoop谢谢,我尝试了
更新
,但是它对我不起作用…@KarstenKoop我正在使用
id
列作为
主键,而不是
awb
…在awb上放置一个唯一的键,然后按照@KarstenKoop说的做。谢谢,我尝试了
改变表的顺序添加唯一(
跟踪id
比我用了这个:请检查并告诉我
关于重复的键集order\u id=“.mysqli\u real\u escape\u string($conn,$getData[1])”;
意味着它将允许重复的命令?意味着如果awb是相同的,它将更新order\u id列?但它对我不起作用……它不会更新order\u id列中的新值。。。。。