我有一个.csv文件,其数据插入数据库,但我的代码有一个缺点,如
如果我的.csv文件包含一行并将其插入db然后插入更多行,则用户应从.csv中删除该第一行并添加新行值然后它将插入其他重复键条目作为我的数据库中的列有独特的关键。
我将.csv插入mysql的代码。
<?php
//db connection goes here
$csv_file="/var/www/html/141.csv";
$savefile="141.csv";
$handle = fopen($csv_file, "r");
$i=0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($i>0){
$import="INSERT into lead141(urn,phone)values('".addslashes($data[0])."','".addslashes($data[1])."')";
mysql_query($import) or die(mysql_error());
}
$i=1;
}
$test="select * from lead141
where phone in (select phone from dnc)";
$query=mysql_query($test);
$testing=count($query);
echo "matched rows".$testing;
?>
我的mysql lead141
表结构
CREATE TABLE `lead141` (
id int(100) NOT NULL AUTO_INCREMENT,
urn int(100) NOT NULL,
phone bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
我的141.csv文件
urn phone
141 20134325
141 20985675
如果我运行我的代码141.csv插入数据库但是当用户在141.csv中添加新行时,用户应该删除以前的行并向141.csv添加新行以进行插入。
我需要让我的代码能够将141.csv中的新值插入到db中,即使在.csv.i中存在旧值,如果我放入一个更新语句然后插入则它会完成。
我正在走向逻辑的正确道路吗?请帮忙答案 0 :(得分:2)
尝试使用INSERT ... ON DUPLICATE KEY UPDATE Syntax,如下所示:
$import="INSERT INTO lead141(urn,phone)values('".addslashes($data[0])."','".addslashes($data[1])."') ON DUPLICATE KEY UPDATE phone= '".addslashes($data[1])."'";
因为phone
列是UNIQUE KEY
。
答案 1 :(得分:0)
您也可以使用INSERT IGNORE INTO ...
,但我更喜欢ON DUPLICATE KEY UPDATE ...
功能,因为: