【发布时间】:2019-08-05 03:09:23
【问题描述】:
我需要检查导入 excel 中的重复记录。当我单击导入时,重复的记录也会插入到数据库表中。我不想在数据库表中插入重复数据,但是我的代码在数据库表中插入了重复记录。
这是我的代码
<?php
if (isset($_POST["import"])) {
ini_set('max_execution_time', 120); //300 seconds = 5 minutes
//$filename = $_FILES['file']['name'];
$file = $_FILES['file']['tmp_name'];
//$ext=substr($file,strrpos($file,"."),(strlen($file)-strrpos($file,".")));
//if($ext=="csv")
$handle = fopen($file, "r");
$c = 0;
while(($filesop = fgetcsv($handle,",")) !== false)
{
//$filesop[] = fgetcsv($handle,",");
$c++;
if ($c == 1) { continue; }
//$id = mysqli_real_escape_string($conn,$filesop[0]);
$category = mysqli_real_escape_string($conn,$filesop[0]);
$tags = mysqli_real_escape_string($conn,$filesop[1]);
$title = mysqli_real_escape_string($conn,$filesop[2]);
$url =mysqli_real_escape_string($conn,$filesop[3]);
$description = mysqli_real_escape_string($conn,$filesop[4]);
$date = date('Y-m-d', strtotime($filesop[5]));
$check="SELECT * FROM `report` WHERE title='$title' AND url='$url'";
$result=mysqli_query($conn,$check)or die($check."<br/><br/>".mysql_error());
if(mysqli_num_rows($result) == 0) //If no rows are returned
{
//print_r($filesop[0]);
var_dump($filesop);
//echo $filesop[0];
$sql = "insert into report(category,tags,title,url,description,date) values ('$category','$tags','$title','$url','$description','$date')";
$result=mysqli_query($conn,$sql)or die($sql."<br/><br/>".mysql_error());
//echo $sql;
print_r($_FILES);
//
//echo $filesop[1];
//echo "success";
}
else
echo "duplicates found";
}
//if($result){
//echo " upload success";
exit();
//ini_set('auto_detect_line_endings',FALSE);
fclose($handle);
// }
//else
// echo "cannot upload csv file";
}
mysqli_close($conn);
?>
【问题讨论】:
-
你能解释一下出了什么问题吗?你期望看到什么,你看到了什么?
-
我不想在数据库表中插入重复数据。但是我的代码在数据库表中插入了重复记录。
-
让数据库完成这项工作。只需定义一个唯一标识符并在表中插入一个唯一列。在那里插入标识符。因此数据库可以处理唯一条目,您可以在重复键上update您的数据库条目。
-
我在我的数据库中为标题列和 url 列创建了唯一索引。但如果我的 csv 文件的第一行是重复值,其他行值不会插入。
-
你看过我的回答了吗?
标签: php csv duplicates