IngDiaz

Importar datos desde archivo CSV a BD en MySQL con PHP

¡Hola a todos!

A continuación, les mostraré un código en PHP para poder hacer un proceso de importación de un archivo CSV hacia una base de datos en MySQL (o podría ser cualquier otro gestor de BD soportado por PHP). Quizás ésta entrada está de la mano a una anterior que publiqué: Crear un archivo CSV para exportar datos.

Voy a colorear por partes el código para medio explicar cada cosa….

Bien, éste es el código:

<?php
   $con=@mysqli_connect("localhost", "root", "clave", "base_datos");
   $info = fopen ("info.csv" , "r" );
   while (($datos=fgetcsv($info,10000,",")) !== FALSE){
      $linea[]=array('codigo'=>$datos[0],'campo2'=>$datos[1],'campo3'=>$datos[2]);
   }
   fclose ($info);

   $insertados=0;
   $errores=0;
   $actualizados=0;
   foreach($linea as $indice=>$value){
      $codigo=$value["codigo"];
      $campo2=$value["campo2"];
      $campo3=$value["campo3"];

      $sql=mysqli_query($con,"select * from mitabla where codigo ='$codigo'");
      $num=mysqli_num_rows($sql);
      if ($num==0){
         $sql="insert into mitabla (codigo, campo2, campo3) values('$codigo','$campo2','$campo3')";
         if ($insert = mysqli_query($con,$sql)){
            $insertados+=1;
         }else{
            $errores+=1;
         }
      }else{
         $sql="update mitabla set campo2='$campo2', campo3='$campo3' where codigo='$codigo'";
         if ($update = mysqli_query($con,$sql)){
            $actualizados+=1;
         }else{
            $errores+=1;
         }
      }
   }

   echo "Registros insertados: ".number_format($insertados,2)." <br/>";
   echo "Registros actualizados: ".number_format($actualizados,2)." <br/>";
   echo "Errores: ".number_format($errores,2)." <br/>";
?>

Eso es todo. Espero que le sirva a alguien y pues… me imagino que me servirá también a mi en un futuro, dado que suelo necesitar hacer éste tipo de cosas por razones extrañas del destino xD

¡Saludos!

Comentarios por Facebook

comentarios