我有一个我正在处理的脚本,它解析CSV文件,然后将其放入MySQL数据库。除了在我正在开发的文件中有一个重复的主键,我有一切正常工作,这很好,因为这迫使我确保错误处理按预期工作。问题是我希望脚本抛出重复的错误并继续处理,这意味着"或者死亡"不是一种选择。我只是在测试一个" false"查询结果但是这会导致重复之后的每个插入都重复发生重复错误,从而发出数百或数千个重复键错误。
以下是有问题的代码部分...(更新:基本上包括整个脚本。)
$file = fopen("Temp/03132014all.csv","r");
$out_file = fopen("Temp/clean_ouput.csv",'w');
$cnt_IN = 0; $invalid = 0; $cnt_good = 0;
$inv_yr = "/^0000/";
while(! feof($file)) {
$lead = fgetcsv($file);
if ($lead[1] != "surname") {
$dt = explode(" ",$lead[9]);
$time = isset($dt[2]) ? $dt[2] : 0;
$date = $dt[0];
if (empty($lead[3]) || empty($lead[8]) || empty($lead[9]) || preg_match($inv_yr,$lead[9])) { // eliminate invalid leads first
$invalid++;
} elseif ($lead[6] == "IN") { // Test for leads from Indiana
$cnt_IN++;
$sql = "INSERT INTO indiana_leads
(First_Name, Last_Name, Email, Address, City, State, ZIP, Phone, Gender, Lead_Date, Lead_Time, Lead_IP)
VALUES ('$lead[0]','$lead[1]','$lead[2]','$lead[4]','$lead[5]','$lead[6]','$lead[7]','$lead[8]','$lead[13]',STR_TO_DATE('$date','%m/%d/%Y'),STR_TO_DATE('$time','%H:%i'),'$lead[2]')";
} else {
$cnt_good++;
$sql = "INSERT INTO vb_leads_test
(First_Name, Last_Name, Email, Address, City, State, ZIP, Phone, Gender, Lead_Date, Lead_Time, Lead_IP)
VALUES ('$lead[0]','$lead[1]','$lead[2]','$lead[4]','$lead[5]','$lead[6]','$lead[7]','$lead[8]','$lead[13]',STR_TO_DATE('$date','%m/%d/%Y'),STR_TO_DATE('$time','%H:%i'),'$lead[2]')";
$out_array = array($lead[0],$lead[1],$lead[2],$lead[4],$lead[5],$lead[6],$lead[7],$lead[8],$lead[13],$date,$time,$lead[2]);
fputcsv($out_file, $out_array);
}
$result = mysqli_query($con,$sql); // or die(mysqli_error($con));;
if (!$result) {
$error = mysqli_error($con);
echo $error;
//$result = true;
}
}
}
正如你所看到的,我试图将$ result强制回到" true"在错误之后,但我仍然不断地将每个新插入的垃圾邮件发送到浏览器/日志。我认为我在这里做了一些简单的错事,但我不能为我的生活弄清楚它是什么。提前感谢您的帮助。
答案 0 :(得分:-1)
- 更新
创建一个日志文件来记录重复的条目,而不是将它们打印到屏幕上。
在顶部:
$duplicate_key_file = fopen("Temp/duplicate_key.csv",'w');
然后用以下内容替换页面底部的“if”:
if (!$result) {
$duplicate_key_array = array($lead[0],$lead[1],$lead[2],$lead[4],$lead[5],$lead[6],$lead[7],$lead[8],$lead[13],$date,$time,$lead[2]);
fputcsv($duplicate_key_file , $duplicate_key_array);
}
注意:此部分来自您自己的代码