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


Importing CSV into database, insert without truncating table

我这里有这段代码,它允许我将数据从csv文件导入数据库,现在它所做的是在插入之前截断表,我以前曾尝试删除截断表,但它不会传递数据。我的意思是,我如何修改这里的代码?我只需要它来插入数据,而不需要清空当前表!

谢谢。。

$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 {

}

"我以前尝试过删除截断表,但它无法传递数据。"

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

我只是想,您的表有一个唯一的列。。。因此,如果不截断表,就无法插入存在的记录。。。。

所以你要做的是:

  1. 检查记录是否存在

1a)如果为真。。。使用UPDATE

1b)如果为false。。使用INSERT

  1. 此外,如果CSV中不再有记录,则必须使用DELETE

因此,您可以看到,处理所有现有记录

并不是一件简单的事

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

INSERT IGNORE into `imovo`

或者,如果您想替换一些重复的行,请执行replace

REPLACE into `imovo`

这将根据PRIMARY KEY或UNIQUE索引替换重复的行

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