2011-08-17 137 views
0

我從csv文件導入一個巨大的數據到我的數據庫,但問題是,如果在sql中有錯誤,我的插入停止,從而使我的批量插入無用。返回,刪除上傳的數據,並刪除導致插入問題的條目,然後重新開始。我想程序跳過它,並繼續插入,我知道我必須應用嘗試和趕上,我已經在我的算法中應用它,但我cnt理解如何使用,以便它繼續插入。 這裏是我的代碼批量數據插入sql問題

$num=35; //number of columns 
$dum=true; // a check 
$sum=0;// count total entries 

if (($handle = fopen($_FILES['file']['name'], 'r')) !== FALSE) { 
while (($data = fgetcsv($handle, 10000, ',')) !== FALSE) 
{ 
    if($dum) 
     { 
    for ($qwe=0; $qwe < $num; $qwe++) { //searching the columns exact position in case they have been changed 

      if($data[$qwe]=='ID') 
      {$a=$qwe;} 
      . 
          . 
          . 
          . 
          .else if($data[$qwe]=='PowerMeterSerial') 
      {$aa=$qwe;} 
      else if($data[$qwe]=='Region') 
      {$ab=$qwe;} 
      else if($data[$qwe]=='Questions') 
      {$ac=$qwe;} 

     } 
    } 
    if(!$dum) 
    { 

     for($qwe=0;$qwe<$num;$qwe++) 
     { 
      if($qwe==7||$qwe==8) 
      { 
      if($qwe==7){$asd=$data[$qwe];} 
      $data[$qwe]=date('Y-m-d h-i-s',strtotime($data[$qwe])); 
      } 
     } 


     $data[57]=date('Y-m-d ',strtotime($asd));try { 

     $sql="INSERT INTO pm (ID, .......... Questions, dateofdata ,Unsuccessful) VALUES ('$data[$a]','$data[$b]','$data[$c]','$data[$d]','$data[$e]','$data[$f]','$data[$g]','$data[$h]' ,'$data[$i]','$data[$j]','$data[$k]', '$data[$l]', '$data[$m]','$data[$n]','$data[$o]','$data[$p]','$data[$q]','$data[$r]','$data[$s]','$data[$t]','$data[$u]','$data[$v]','$data[$w]', '$data[$x]','$data[$y]','$data[$z]','$data[$aa]','$data[$ab]','$data[$ac]','$data[57]','$data[30]')"; 
     if (!mysql_query($sql,$con)) 
     { 
     die('Error: ' . mysql_error(). $sql); 
     } 

     } 
     catch (Exception $e) 
     { 
    echo'<br>'; echo $sql; 
     } 
    $sum++; 

    }$dum=false; 
    } 

} 
?> 

敬請注意,在上傳algorithme或SQL沒有問題,比SQL生成錯誤的,當輸入數據不匹配的數據類型,我在努力嘗試和catch。 。請幫助

回答

0

將您的die()命令更改爲print()。你會看到錯誤是什麼,腳本會移到下一行。

鑑於你的代碼的結構,我猜你會在任何時候插入一個字符串(特別是內部引用的字符串)時炸掉,導致SQL語法錯誤。您必須在將這些值插入查詢字符串之前,將您csv中的每個文本字段通過mysql_real_escape_string()

+0

我有另一個算法,我必須插入外鍵,但如果插入值,表中找不到相應的值發生錯誤!我想繼續處理文件! –