2011-08-17 3 views
0

J'importe une énorme quantité de données provenant d'un fichier csv dans ma base de données, mais le problème est que s'il y a une erreur dans le sql, mon insertion s'arrête, rendant ainsi mon insertion inutile inutile. revenir en arrière, supprimer les données téléchargées et supprimer cette entrée qui pose problème dans mon insertion et recommencer. Je veux que le programme saute et continue l'insertion, je sais que je dois m'appliquer essayer et attraper, je l'ai appliqué dans mon algo mais je cnt comprendre comment employer de sorte qu'il continue son insertion. ici est mon codeinsertion de données en bloc sql numéro

$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; 
    } 

} 
?> 

de bien vouloir noter qu'il n'y a pas question dans le téléchargement Algorithme ou sql, son lorsque les données d'entrée ne correspond pas au type de données que SQL génère une erreur, pour que je suis en train try et catch. .aider s'il vous plaît

Répondre

0

Modifier votre commande die() à un print(). Vous verrez ce que l'erreur a été, et le script passera à la ligne suivante.

Étant donné la structure de votre code, je suppose qu'il va exploser chaque fois que vous insérez une chaîne (en particulier avec des guillemets à l'intérieur), ce qui provoque des erreurs de syntaxe SQL. Vous DOIT passer chaque champ de texte de votre csv à travers mysql_real_escape_string() AVANT d'insérer ces valeurs dans la chaîne de requête.

+0

J'ai un autre algorithme où je dois insérer une clé étrangère, mais si la valeur d'insertion, la valeur correspondante ne se trouve pas dans le tableau, une erreur se produit! Je veux continuer le traitement du fichier !!! –

Questions connexes