2011-08-17 100 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

我有另一个算法,我必须插入外键,但如果插入值,表中找不到相应的值发生错误!我想继续处理文件! –