Php 如果第一列具有相同的值,则更新第二列
我导入CSV并将值保存在数据库中,然后显示在php页面中 CSV php页面 要求: 现在,当我导入另一个CSV时,如果第一列[AWB]的值相同[已经存在于DB中],那么我要更新CSV的第二列 问题: 但现在,它不是导入,只是跳过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)
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列中的新值。。。。。