0

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

这是我的代码:

<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); 
     }
} 
    ?>

谢谢你

4

3 回答 3

2

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

于 2012-09-18T14:36:42.120 回答
0

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

REPLACE INTO import_items...

而不是 INSERT INTO。语法在其他方面是相同的。

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

于 2012-09-18T14:35:29.767 回答
0

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

于 2012-09-18T14:44:21.553 回答