jueves, 18 de junio de 2015

Subir archivos TXT a una Base de Datos en MySql

Los documentos .txt son muy livianos y se usan en una rutina automática para que una o varias tablas de una base de datos se actualicen con cierta frecuencia. Esto con el fin de que algunas tablas necesitan ser actualizadas con datos diferentes a los que se manejan por defecto en una base de datos actual. El Ejemplo que se plantea carga varios archivos txt que se han generado con información previamente desde una base de datos contable, esta información se requiere en una nueva base de datos, que en este ejemplo maneja la información de las retenciones.
Manos a la obra.


Primero se elimina los datos antiguos que tenga la tabla en la base de datos.
mysql_query('truncate cnt_cuenta ', $conexion)  or die ("error: ^_^ ".mysql_error());

Segundo se carga el archivo txt en la nueva tabla con un insert, pero en este caso insertamos el documento completo.
mysql_query("LOAD DATA LOCAL INFILE 'cnt_cuenta.txt' INTO TABLE cnt_cuenta  FIELDS TERMINATED BY ',' ENCLOSED BY '''' LINES TERMINATED BY ';' ", $conexion) or die ("error: ^_^ ".mysql_error()); 

//Mensaje de Aviso
echo "Tabla cnt_cuenta Cargada.
";

Para hacerlo con varios archivos txt el código quedaria de la siguiente manera:
Rutina.php
#Se llama el archivo de conexión
require_once('conexion_2015.php');

//de acuerdo al código de conexión se llama la base de datos a usar.
mysql_select_db($database_conexion, $conexion);
set_time_limit (99900); 

//Comenzamos eliminando los datos antiguos de la tabla cnt_cuenta y carga el .txt con los nuevos datos a la base de datos retencion_2015
mysql_query('truncate cnt_cuenta ', $conexion)  or die ("error: ^_^ ".mysql_error());
//Carga el archivo .txt 
mysql_query("LOAD DATA LOCAL INFILE 'cnt_cuenta.txt' INTO TABLE cnt_cuenta  FIELDS TERMINATED BY ',' ENCLOSED BY '''' LINES TERMINATED BY ';' ", $conexion) or die ("error: ^_^ ".mysql_error()); 
echo "Tabla cnt_cuenta Cargada.
";

//El proceso se repite con todos los archivos que necesitemos subir.

mysql_query('truncate cnt_terceros ', $conexion)  or die ("error: ^_^ ".mysql_error()); 
//Carga el archivo .txt 
mysql_query("LOAD DATA LOCAL INFILE 'cnt_terceros.txt' INTO TABLE cnt_terceros  FIELDS TERMINATED BY ',' ENCLOSED BY '''' LINES TERMINATED BY ';' ", $conexion) or die ("error: ^_^ ".mysql_error()); 
echo "Tabla cnt_terceros Cargada. 
";
Se debe tener en cuenta que los archivos .txt deben estar ubicados en la raíz del sitio para que de esta forma puedan ser tomados por el "LOAD DATA LOCAL INFLILE", tambien la rutina y el código de conexión.

El archivo de conexión sería el siguiente:

Conexión_2015.php
//Se crea la conexión a la base de datos de Mysql
$hostname_conexion = "mysql";
$database_conexion = "retencion_2015";
$username_conexion = "usuario";
$password_conexion = "password";
$conexion = mysql_connect($hostname_conexion, $username_conexion, $password_conexion) or trigger_error(mysql_error(),E_USER_ERROR); 

mysql_query ("SET NAMES 'utf8'");


Un archivo .txt debe venir de la siguiente manera -> voy a mostrar un muy pequeño ejemplo de como debería ser este tipo de documento, la estructura que debe tener al momento de ser cargado.
Las comillas incluyen el valor que pertenece cada fila, en el orden en que se encuentra la tabla en la base de datos, separado por comas para formar las columnas.
'13806789','','13','GUILLERMO  GOMEZ AMAYA','CL 19 14 38','Bucaramanga','6332250','GOMEZ','AMAYA','GUILLERMO','','68','001','169';'9000176942','3','31','SARCA COMBUSTIBLES LTDA','CR 15 3 28B','Bucaramanga','6711553','','','','','68','001','169';'88154485','','13','EDGAR  CAPACHO','CR 61A 15 26','Piedecuesta','6348257','CAPACHO','','EDGAR','','68','547','169';'91158641','','13','FLOREZ GOMEZ OSCAR','CL 5 16B19 LIMONCITO','Floridablanca','6485717','FLOREZ','GOMEZ','OSCAR','','68','276','169';'800009283','0','31','WELLQUEM DE COLOMBIA LTDA','CR 111A  16 02 B FO','Bogotá','6450025','','','','','11','001','169';'800088383','6','31','CARBONATOS Y PLASTICOS S.A.','CR 48  65 SUR 128 SAB','Medellín','2884468  2884468','','','','','05','001','169';'91200464','','13','JAIRO AUGUSTO FONSECA GOMEZ','CR 36 52 126','Bucaramanga','6475734','FONSECA','GOMEZ','JAIRO','AUGUSTO','68','001','169';'73150572','','13','JUAN PABLO ECHEVERRI GONZALES','CL 48  28 34','Bucaramanga','6574760','ECHEVERRI','GONZALES','JUAN','PABLO','68','001','169';'811016479','6','31','INDUSTRIAS SOBRE RUEDAS EMPRESA UNIPERSONAL','CL 8 SUR  50 FF 110','Bucaramanga','2657326','','','','','68','001','169';'860004662','4','31','COLVAN SIA S.A.','AVDA EL DORADO  96 47','Bogotá','4255525','','','','','11','001','169';'900178159','1','31','MUNDO BIZ S.A.','CL 108 15 25','Bogotá','2131777','','','','','11','001','169';'91475190','','13','HUGO ARMANDO MORENO SILVA','CC ACROPOLIS LOCAL 256B','Bucaramanga','6411312','MORENO','SILVA','HUGO','ARMANDO','68','001','169';'91474605','','13','GIOVANNY  SANCHEZ SANCHEZ','CL 44 1 OCC 19','Bucaramanga','6338934','SANCHEZ','SANCHEZ','GIOVANNY','','68','001','169';'6713150','','13','JOSE DE JESUS MORENO','CR 11 3A 18','Bucaramanga','6713150','MORENO','','JOSE','DE JESUS','68','001','169';'0614-131088-','0','31','TRANSPORT S.A. DE C.V.','KM 28 CARRETERA A SANTA ANA, SITIO DEL NIÑO','EL SALVADOR','5032338504','','','','','','','169';'900176942','3','31','SAGRA COMBUSTIBLES LTDA','CR 15 3 28','Bucaramanga','6711753','','','','','68','001','169';'63289738','','13','ANA ISABEL BRETON','CR 26  19 24','Bucaramanga','3164901307','BRETON','','ANA','ISABEL','68','001','169';'91259604','','13','MARIO  HERNANDEZ','CL 4 17 01','Bucaramanga','6719390','HERNANDEZ','','MARIO','','68','001','169';'91481222','','13','CRISTIAN  RIVERA','CL 55 1W 92','Bucaramanga','6447740','RIVERA','','CRISTIAN','','68','001','169';'91286621','','13','LIBARDO  CORREA','CR 14 13 02','Bucaramanga','6337570','CORREA','','LIBARDO','','68','001','169';'800245081','0','31','DISTRIBUCIONES GUARIN GUARIN L','CL 28 15 62','Bucaramanga','6337082','','','','','68','001','169';'91489184','','13','ALFREDO  PEÑARANDA','CL 25 18 31','Bucaramanga','6443102','PEÑARANDA','','ALFREDO','','68','001','169';'13747294','','13','ROBERTO ALFONSO CORREA TROCHA','CL 33 18 36 LOCAL 127','Bucaramanga','6334090','CORREA','TROCHA','ROBERTO','ALFONSO','68','001','169';'91264804','','13','WILSON  HERNANDEZ','CL 35 17 77 OFIC 708','Bucaramanga','6330140','HERNANDEZ','','WILSON','','68','001','169';'91485695','','13','ALEXANDER  VILLAMIZAR RENGIFO','CL 52 24 14','Bucaramanga','6473322','VILLAMIZAR','RENGIFO','ALEXANDER','','68','001','169';'91071167530','','13','LAURA PATRICIA RICO CASTILLO','CL 107A 42 14','Bucaramanga','6493130','RICO','CASTILLO','LAURA','PATRICIA','68','001','169';'91081007719','';
 Raíz del Sitio
       *Archivos1.txt
       * Archivo2.txt
       *Conexión_2015.php
       *Rutina.php

1 comentario:

  1. Ejemplo muy ilustrativo. Yo lo hice con mysqli, que es mas seguro.

    Es una buena forma de subir los archivos txt al server

    saludos

    ResponderEliminar