我想通过csv文件向数据库添加数据。能够实现这一点,但无论何时我再次上传该文件它都会重复,我不希望特定行的数据再次连续输入,但特定的列字段可能会重复。以下代码用于上传文件我有具有表格位置的数据库,其中包含ID(自动递增),州,城市的字段。
<?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 :(得分:1)
第一种方式: 将独特的州,市,区合并在一起:
ALTER TABLE `DB Name`.`Table Name` ADD UNIQUE (`State`, `City`, `District`);
并且插入查询应该在try catch
第二种方式: 插入后,您应手动删除表中的重复项 How to delete duplicates on a MySQL table?
答案 1 :(得分:0)
您需要在SELECT
之前创建INSERT
查询,以检查某些字段的记录存在。如果选择找到记录 - 请勿将其插入数据库。
答案 2 :(得分:0)
有2个解决方案
尝试
ALTER TABLE `location` ADD UNIQUE `unique_index`(`State`,`City`,`District`);
select
查询将数据插入表格之前,它已经存在或不存在。如果存在则跳过该行/日期。如果不存在Insert
行数据。答案 3 :(得分: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];