使用Update从CSV导入MySQL

时间:2012-09-18 14:33:08

标签: php mysql csv import

我有这个PHP代码,旨在将csv文件中的所有行和列导入到mysql表中作为记录。它成功地从csv插入名为“import_items” BUT 的mysql表中,如果我重新执行导入,它将插入重复的记录。我需要的是适合查询更新的位置,在该更新中应该检查如果表名中的项目存在 - >更新值 IF NOT EXISTS ..插入记录!

这是我的代码:

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

谢谢

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

REPLACE INTO import_items...

而不是INSERT INTO。语法相同。

此语句将检查表的主键是否存在重复项。如果密钥不存在,它将插入一行。如果密钥存在,它将更新行中的其他字段。它等同于你首先执行SELECT,然后分支执行UPDATE或INSERT。

答案 2 :(得分:0)

您需要共享表架构。如果您没有要在其中强制执行重复项的列中没有正确的密钥,则使用REPLACE INTOINSERT ... ON DUPLICATE KEY UPDATE将无效。另一件容易做的事情(你已经对表格进行了删除),就是在要防止重复的列上放置一个唯一的键。