将CSV导入数据库,插入时不截断表

时间:2012-08-31 09:07:09

标签: php mysql

我在这里有这个代码,它允许我将数据从csv文件导入到数据库中,现在这样做就是在插入之前截断表,我试图删除truncate table之前但是它不会传递数据。我的意思是如何在这里修改此代码?我需要它只是为了插入数据,而不是清空当前的表!

谢谢..

$deleterecords = "TRUNCATE TABLE imovo"; //empty the table of its current records
mysql_query($deleterecords);

//Upload File
if (isset($_POST['submit'])) {
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
        echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
        echo "<h2>Displaying contents:</h2>";
        readfile($_FILES['filename']['tmp_name']);
    }

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

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $import="INSERT into imovo(date,time,location,rbpos_id,mobile_number) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";

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

    fclose($handle);

    print "Import done";

    //view upload form
}else {


}

3 个答案:

答案 0 :(得分:3)

&#34;我之前尝试删除截断表,但它不会传递数据。&#34;

可能是因为您有唯一索引并尝试插入重复记录。

答案 1 :(得分:0)

我只是想,你的表有一个唯一的列...所以如果你不截断表,就不能插入存在的记录......

所以你需要做的事情:

  1. 检查记录是否存在
  2. 1a)如果是......请使用UPDATE

    1b)if false ..使用INSERT

    1. 同时检查您的CSV中是否还有记录,然后您必须使用DELETE
    2. ...

      所以你看,处理所有现有记录并不是很简单

答案 2 :(得分:0)

您上传的文件是否包含一些以前上传的数据? 如果是这种情况,你就知道了,你可以使用

INSERT IGNORE into `imovo`

或者如果要替换一些重复的行,请执行REPLACE

REPLACE into `imovo`

这将取代重复的行,具体取决于PRIMARY KEY或UNIQUE索引

http://dev.mysql.com/doc/refman/5.0/en/replace.html