【问题标题】:Importing from CSV to MySQL using Update使用更新从 CSV 导入 MySQL
【发布时间】:2012-09-18 14:33:07
【问题描述】:

我有这个 php 代码,旨在将 csv 文件中的所有行和列作为记录导入 mysql 表。它成功地从 csv 插入名为“import_items”的 mysql 表 BUT 如果我重新导入,它将插入重复的记录。我只需要在哪里安装查询更新,它应该检查 IF ITEM EXISTS in table name-> Update values , IF NOT EXISTS..Insert record! p>

这是我的代码:

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

File to import:<br />

<input size='30' type='file' name='filename'>

<input type="submit" name="submit" value="Upload"></form>



<?php 
require_once('connect_db.php');

   //Upload File 
    if (isset($_POST['submit'])) { 
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 


    //Import uploaded file to Database 
    $row = 1; 
    $handle = fopen($_FILES['filename']['tmp_name'], "r"); 


    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

              //Update Database Values 

        $import="insert into import_items (item_no,qty,actual_price,discount_price,difference_price,date) VALUES('".mysql_real_escape_string($data[0])."', '".mysql_real_escape_string($data[1])."', '".mysql_real_escape_string($data[2])."', '".mysql_real_escape_string($data[3])."', '".mysql_real_escape_string($data[4])."', '".$date = date('Y-m-d')."')"; 

        mysql_query($import) or die(mysql_error()); 

    } 



    fclose($handle); 
     }
} 
    ?>

谢谢

【问题讨论】:

    标签: php mysql csv import


    【解决方案1】:

    查看INSERT INTO ... ON DUPLICATE KEY UPDATE ... 语法。哦,确保你的表中有一个主键,这几乎总是一个好主意。

    【讨论】:

      【解决方案2】:

      MySQL 有一个语句将检查现有行,并且仅在它不存在时插入。使用

      REPLACE INTO import_items...
      

      而不是插入。其他方面语法相同。

      此语句将通过表的主键检查重复项。如果键不存在,它将插入一行。如果键存在,它将更新行中的其他字段。这相当于您先执行 SELECT,然后分支执行 UPDATE 或 INSERT。

      【讨论】:

      • REPLACE 通常通过主键覆盖,而不是仅在主键不存在时才插入...
      • @Matt S ,我已经尝试 REPLACE INTO 并且我仍然有重复 :(
      • @Alihamra,无论您使用哪种解决方案,请确保您在桌子上有一个主键以避免重复。
      【解决方案3】:

      您需要共享您的表架构。如果在要强制不重复的列中没有正确的键,则使用 REPLACE INTOINSERT ... ON DUPLICATE KEY UPDATE 将不起作用。另一件很容易做到的事情(您已经对表进行了重复数据删除),就是在要防止重复的列上放置一个唯一键。

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 2017-10-02
        • 1970-01-01
        • 2011-10-09
        • 2019-07-20
        • 1970-01-01
        • 2020-08-06
        • 2018-12-23
        • 2012-05-01
        相关资源
        最近更新 更多