簡體   English   中英

循環中奇怪的mysqli_error行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM