2017-04-07 139 views
1

我想通过csv文件添加数据到数据库。我能够实现这一点,但每当我再次上传该文件它得到重复,我不希望特定行的数据再次进入一行,但一个特定的列字段可能会重复。下面的代码是上传文件我有具有表格位置的数据库具有用于ID(自动递增),状态,城市的字段。从csv文件添加数据到mysql数据库,避免重复在php

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL); 
require ('dbconfig.php'); 

if(isset($_POST['submit'])) 
{ 
    $fname = $_FILES['sel_file']['name']; 
    echo 'upload file name: '.$fname.' '; 
    $chk_ext = explode(".",$fname); 

    if(strtolower(end($chk_ext)) == "csv") 
    { 
     $filename = $_FILES['sel_file']['tmp_name']; 
     $handle = fopen($filename,"r"); 

     while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) 
     { 
      $sql = "INSERT into location(State,City,District) values('$data[0]','$data[1]','$data[2]')"; 
      mysqli_query($conn,$sql) or die ; 
     } 
     fclose($handle); 
     echo "Successfully imported"; 
    } 
    else 
    { 
     echo "Invalid File"; 
    } 

} 
?> 
<h1>import CSV file</h1> 
<form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post' enctype="multipart/form-data"> 
Import File: <input type='file' name='sel_file' size='20'> 
<input type='submit' name='submit' value='submit'> 
</form> 
+0

得到解决方案使用插入忽略成(........),同时使城市独特的表中 –

回答

0

您需要INSERT之前创建SELECT查询一些领域来检查记录所有脑干。如果选择找到的记录 - 不要将其插入数据库。

0

有针对

  1. 2解决方案,如果你不想重复的州,市,区的组合,然后添加一个唯一键所有列

ALTER TABLE `location` ADD UNIQUE `unique_index`(`State`,`City`,`District`); 
  • 之前与插入数据到表检查查询它已经存在与否。如果存在,则跳过该行/日期。如果不存在Insert行数据。
  • 1

    第一种方式: 结合独特的国家,市,区一起:

    ALTER TABLE `DB Name`.`Table Name` ADD UNIQUE (`State`, `City`, `District`); 
    

    ,并插入查询应该是try catch

    第二种方式: 插入您应该手动删除重复后从您的表 How to delete duplicates on a MySQL table?

    0

    您可以使用插入和更新在一个查询。

    如果数据已经存在,那么更新该数据 只是将您的插入查询更改为我的插入查询。

    INSERT INTO location(State,City,District) VALUES($data[0]','$data[1]','$data[2]') ON DUPLICATE KEY UPDATE  
    State=$data[0], City=$data[1] ,District=$data[2];