[英]Strange mysqli_error behavior in loop
我有一個正在使用的腳本,它將解析CSV文件,然后將其放入MySQL DB。 除了正在開發的文件中存在重復的主鍵外,其他所有事情都可以按需進行,這很好,因為這迫使我確保錯誤處理按需進行。 問題是我希望腳本拋出重復錯誤並繼續進行處理,因此這意味着“或死”不是一個選擇。 我只是簡單地測試一個“假”查詢結果,但是這導致重復之后的每個插入重復重復重復錯誤,從而造成數百個或可能數千個重復的鍵錯誤。
這是有問題的代碼部分...(更新:基本上包括整個腳本。)
$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”,但對於每次新插入的操作,我仍然始終將錯誤發送給瀏覽器/日志。 我以為我在這里做一些簡單的錯誤,但是我一生無法弄清它是什么。 在此先感謝您的幫助。
- 更新
創建一個日志文件來記錄重復的條目,而不是將其打印到屏幕上。
在頂部:
$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);
}
注意:此部分來自您自己的代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.