Importar datos a MySQL desde un archivo CSV con PHP

Compartir

En esta ocasión quiero compartir la manera en la que he realizado la importación de datos a Mysql usando php, teniendo en cuenta que los datos que se necesita importar se encuentran en un archivo con extensión XLS (excel). A continuación presento la manera en que lo he realizado.

Paso 1: Crear tabla mysql en la cual realizare el vaciado de datos.

--
-- Base de datos: `test`
--

-- --------------------------------------------------------

-- -- Estructura de tabla para la tabla `productos` --

CREATE TABLE IF NOT EXISTS `productos` ( `id` int(11) NOT NULL, `codigo` varchar(30) NOT NULL, `descripcion` varchar(150) NOT NULL, `fabricante` int(30) NOT NULL, `precio` double NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- -- Índices para tablas volcadas --

-- -- Indices de la tabla `productos` -- ALTER TABLE `productos` ADD PRIMARY KEY (`id`);

-- -- AUTO_INCREMENT de las tablas volcadas --

-- -- AUTO_INCREMENT de la tabla `productos` -- ALTER TABLE `productos` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Paso 2: Abrir el archivo excel donde se encuentran almacenados los datos que queremos importar y guardarlo como CSV "delimitado por comas".  Nombrar el archivo  "products.csv" , Se debe almacenar en la misma ruta donde pondremos nuestro archivo php .

Paso 3: Crear el archivo llamado "importar.php".

Paso 4: Dentro del archivo importar.php colocar el siguiente fragmento de codigo:

<?php
	# conectare la base de datos
    $con=@mysqli_connect("localhost", "root", "root", "test");
    if(!$con){
        die("imposible conectarse: ".mysqli_error($con));
    }
    if (@mysqli_connect_errno()) {
        die("Connect failed: ".mysqli_connect_errno()." : ". mysqli_connect_error());
    }

$productos = fopen ("products.csv" , "r" );//leo el archivo que contiene los datos del producto while (($datos =fgetcsv($productos,1000,",")) !== FALSE )//Leo linea por linea del archivo hasta un maximo de 1000 caracteres por linea leida usando coma(,) como delimitador { $linea[]=array('codigo'=>$datos[0],'descripcion'=>$datos[1],'fabricante'=>$datos[2],'precio'=>$datos[3]);//Arreglo Bidimensional para guardar los datos de cada linea leida del archivo } fclose ($productos);//Cierra el archivo

$ingresado=0;//Variable que almacenara los insert exitosos $error=0;//Variable que almacenara los errores en almacenamiento $duplicado=0;//Variable que almacenara los registros duplicados foreach($linea as $indice=>$value) //Iteracion el array para extraer cada uno de los valores almacenados en cada items { $codigo=$value["codigo"];//Codigo del producto $descripcion=$value["descripcion"];//descripcion del producto $fabricante=$value["fabricante"];//fabricante del producto $precio=$value["precio"];//precio del producto

$sql=mysqli_query($con,"select * from productos where codigo='$codigo'");//Consulta a la tabla productos $num=mysqli_num_rows($sql);//Cuenta el numero de registros devueltos por la consulta if ($num==0)//Si es == 0 inserto { if ($insert=mysqli_query($con,"insert into productos (codigo, descripcion, fabricante, precio) values('$codigo','$descripcion','$fabricante','$precio')")) { echo $msj='<font color=green>Producto <b>'.$descripcion.'</b> Guardado</font><br/>'; $ingresado+=1; }//fin del if que comprueba que se guarden los datos else//sino ingresa el producto { echo $msj='<font color=red>Producto <b>'.$codigo.' </b> NO Guardado '.mysqli_error().'</font><br/>'; $error+=1; } }//fin de if que comprueba que no haya en registro duplicado else { $duplicado+=1; echo $duplicate='<font color=red>El Producto codigo <b>'.$codigo.'</b> Esta duplicado<br></font>'; } } echo "<font color=green>".number_format($ingresado,2)." Productos Almacenados con exito<br/>"; echo "<font color=red>".number_format($duplicado,2)." Productos Duplicados<br/>"; echo "<font color=red>".number_format($error,2)." Errores de almacenamiento<br/>"; ?>

 

Paso 5: Ahora solo nos resta ejecutar el archivo "importar.php" en nuestro servidor para que realize la importacion de los datos a nuestra tabla  mysql.

Vídeo demostrativo: Importar datos a MySQL desde un archivo CSV con PHP

Obed Alvarado

Sobre el autor

Artículo redactado por Obed Alvarado. Comparto experiencias prácticas sobre PHP, MySQL, aplicaciones web, instalación en hosting y herramientas para negocios.

Comentarios