我有这个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);
}
}
?>
谢谢
答案 0 :(得分:2)
查看INSERT INTO ... ON DUPLICATE KEY UPDATE ...
语法。哦,并确保你的桌子上有一把主键,这几乎总是一个好主意。
答案 1 :(得分:0)
MySQL有一个语句,它将检查现有行,只有在它不存在时才插入。使用
REPLACE INTO import_items...
而不是INSERT INTO。语法相同。
此语句将检查表的主键是否存在重复项。如果密钥不存在,它将插入一行。如果密钥存在,它将更新行中的其他字段。它等同于你首先执行SELECT,然后分支执行UPDATE或INSERT。
答案 2 :(得分:0)
您需要共享表架构。如果您没有要在其中强制执行重复项的列中没有正确的密钥,则使用REPLACE INTO
或INSERT ... ON DUPLICATE KEY UPDATE
将无效。另一件容易做的事情(你已经对表格进行了删除),就是在要防止重复的列上放置一个唯一的键。