php - 为什么在使用 php 将 CSV 文件导入 MySQL 时会得到重复数据

标签 php html mysql csv import

当点击提交按钮时,我在 MySQL 数据库中得到重复的日期,这意味着 CSV 文件中的一行被插入两次并在数据库中得到相同的记录。

我的 php 代码在这里。

if(isset($_POST['submit'])){
if( $_FILES['file']['name']){
    $filename = explode('.',$_FILES['file']['name']);
    if ($filename[1] == 'csv'){
        $handle = fopen($_FILES['file']['tmp_name'],"r");
        if($_POST['dataType']=='aType'){
            while ($data = fgetcsv($handle)){
                $item0 = mysqli_real_escape_string($con,$data[0]);
                $item1 = mysqli_real_escape_string($con,$data[1]);
                $item2 = mysqli_real_escape_string($con,$data[2]);
                $item3 = mysqli_real_escape_string($con,$data[3]);
                $sql = "insert into `table_XX`(`Column_A`,`Column_B`,`Column_C`,`Column_D`) VALUES ('$item0','$item1','$item2','$item3')";
                mysqli_query($con,$sql);
            }
            if(!(mysqli_query($con,$sql))) echo "something is wrong!";
            fclose($handle);
        }
    }
}

我的 Html 代码在这里。

<form method="post" action="import.php" enctype="multipart/form-data">
  <select name="dataType" class="form-control">
     <option selected="selected">pls select data</option>
     <option>aType</option>
  </select>
  <input type="file" name="file">
  <input type="submit" name="submit" value="submit">
</form>

我的代码有什么问题?谢谢。


编辑:

后来才知道是这行代码导致了这个错误。

if(!(mysqli_query($con,$sql))) echo "something is wrong!"

但是,使用这样的代码来检查我们的查询是一个坏习惯吗?

if(mysqli_query($con,$sql))



顺便问一下,我如何使用数组来存储来自

的值
mysqli_real_escape_string

而不是使用这个 x4

$item0 = mysqli_real_escape_string($con,$data[0]);
$item1 = mysqli_real_escape_string($con,$data[1]);
$item2 = mysqli_real_escape_string($con,$data[2]);
$item3 = mysqli_real_escape_string($con,$data[3]);

最佳答案

原因是因为mysqli_query()被调用了两次。同样在 if() 中它会自己执行!如果你想检查 mysqli_query() 的结果,将它安全地保存在一个变量中,例如 $queryResult = mysqli_query() 然后是 if($queryResult).

mysqli_query($con,$sql); 替换为

if(!mysqli_query($con,$sql)) {
    echo "something is wrong!";
}

并删除:if(!(mysqli_query($con,$sql))) echo "something is wrong!";

ADDITION 阵列解决方案

替换

$item0 = mysqli_real_escape_string($con,$data[0]);
$item1 = mysqli_real_escape_string($con,$data[1]);
$item2 = mysqli_real_escape_string($con,$data[2]);
$item3 = mysqli_real_escape_string($con,$data[3]);

与(未测试)

function escapeArray(array $data) {
    foreach($data as $i => $item) {
        $data[$i] = mysqli_real_escape_string($item);
    }
    return $data;
}

$data = escapeArray($data);

然后要么执行 VALUES (".$data[0].",".$data[1].",".$data[2].",".$data[3].")

VALUES (". implode(',', $data) . ")

关于php - 为什么在使用 php 将 CSV 文件导入 MySQL 时会得到重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43208869/

相关文章:

php - 当我希望它更新多行时,MySQL 只更新 1 行,并且 WHERE 子句允许同时更新

c# - 需要读取 excel 表 C# 并仅导入 mySQL 3 列

php - 我的图片需要很长时间才能加载

php - PHP 中的基本 SQL Select 语句格式化

javascript - RXJS 在 html5 Canvas 上画线

jquery - jQuery 弹出对话框中的 Chrome html5 表单验证

mysql - 从两个表中获取信息

php - MySQL插入列值与自动增量相同的行

php - 格雷码生成 - n 位格雷码

javascript - 延迟的 jquery 脚本在所有其他脚本之后加载