Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将csv文件中的数据添加到mysql数据库,避免在php中重复_Php_Mysql_Csv - Fatal编程技术网

将csv文件中的数据添加到mysql数据库,避免在php中重复

将csv文件中的数据添加到mysql数据库,避免在php中重复,php,mysql,csv,Php,Mysql,Csv,我想通过csv文件向数据库添加数据。我能够做到这一点,但每当我再次上传该文件时,它就会被复制,我不希望在一行中再次输入特定行的数据,但特定列字段可能会被重复。以下代码用于上传文件,我有一个表位置的数据库,该数据库具有ID(自动递增)、State、City字段 <?php ini_set('display_errors',1); error_reporting(E_ALL); require ('dbconfig.php'); if(isset($_POST['submit'])) {

我想通过csv文件向数据库添加数据。我能够做到这一点,但每当我再次上传该文件时,它就会被复制,我不希望在一行中再次输入特定行的数据,但特定列字段可能会被重复。以下代码用于上传文件,我有一个表位置的数据库,该数据库具有ID(自动递增)、State、City字段

<?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>

您需要在
插入之前创建
选择
查询
,以检查某些字段是否存在记录。如果选择查找记录-不要将其插入数据库。

有两种解决方案

  • 如果不想复制州、市和区的组合,请在所有列中添加一个唯一键
  • 试一试

  • 在将数据插入表之前,使用
    检查选择
    查询其是否已存在。如果存在,则跳过该行/日期。如果不存在,则插入行数据
  • 第一种方式: 将独特的州、市、区结合在一起:

    ALTER TABLE `DB Name`.`Table Name` ADD UNIQUE (`State`, `City`, `District`);
    
    插入查询应该在
    try-catch

    第二种方式: 插入后,应手动从表中删除重复项

    您可以一次使用插入和更新查询

    如果数据已经存在,则更新该数据 只需将插入查询更改为我的插入查询

    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];
    

    使用insert ignore into(……)获得解决方案,同时使城市在表中唯一
    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];