我这里有这段代码,它允许我将数据从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 {
}
"我以前尝试过删除截断表,但它无法传递数据。"
可能是因为您有唯一索引并尝试插入重复记录。
我只是想,您的表有一个唯一的列。。。因此,如果不截断表,就无法插入存在的记录。。。。
所以你要做的是:
- 检查记录是否存在
1a)如果为真。。。使用UPDATE
1b)如果为false。。使用INSERT
- 此外,如果CSV中不再有记录,则必须使用DELETE
因此,您可以看到,处理所有现有记录
您上传的文件是否包含以前上传的一些数据?如果是这种情况,并且你知道,你可以使用
INSERT IGNORE into `imovo`
或者,如果您想替换一些重复的行,请执行replace
REPLACE into `imovo`
这将根据PRIMARY KEY或UNIQUE索引替换重复的行
http://dev.mysql.com/doc/refman/5.0/en/replace.html