Subir datos desde un archivo .CSV a una BD MySql
No se han topado con este problema? bueno, les cuento mi experiencia.
Subí una BD a un servidor MySQL, creada con scripts (archivos de texto con sintaxis SQL) pero luego me topé con el problema, que los datos (y muchos) que iba a contener una tabla de la BD, me los proporcionarían en un archivo de Excel. Cómo hacerlo? Me valí de la potencia del php, afortunadamente, estaba en un sistema LAMP, así que no resultó complicada la solucion. A continuación detallo los pasos:
- Guardar el archivo de datos que está en Excel como archivo separado por comas (.csv)
- Colocar ese archivo donde el servidor web tenga acceso.
- Crear un archivo PHP que lea el archivo, le coloque sintaxis sql, y así, lo ingrese a la Base de Datos.
- Ejecutar la pagina .php
- Listo
A continuación les dejo el script php:
<?php
function Conectarse()
{
if (!($link=mysql_connect("localhost","miusuario","mipassword"))) {
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("mibd",$link)) {
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}
$row = 1;
$handle = fopen("datos.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
$cadena = "insert into miTabla(Campo1,Campo2,Campo3,Campo4) values(";
for ($c=0; $c < $num; $c++) {
if ($c==($num-1))
$cadena = $cadena."'".$data[$c] . “‘”;
else
$cadena = $cadena.”‘”.$data[$c] . “‘,”;
}
$cadena = $cadena.”);”;
echo $cadena.”<br>”;
$enlace=Conectarse();
$result=mysql_query($cadena, $enlace);
mysql_close($enlace);
}
fclose($handle);
?>
<h2>Se insertaron <?php echo $row ?> Registros en la tabla miTabla</h2>
Tags relacionados en Blogalaxia:




hola probe el cod y no funciona al abrir la tabla no aparece nada de la informacion que supuestamente subio y ademas muestra todo el codigo en la pagina no se que pasa y ya revise igual muchas gracias
Revisa si tienes correcto:
- Nombre del servidor (en mi caso, ‘localhost’
- Nombre de la Base de Datos, el usuario y el password
- Nombre de la ruta y del archivo .csv
- Nombre de la tabla, y de los campos.
Aunque creo que puede ser porque la sintaxis de entrada no es la correcta, para ello revisa bien los nombres de los campos donde los estas insertando. Para una prueba, inserta desde consola un solo registro, (algo asi como
insert into Persona(nombre, edad, nacionalidad) values ('Juanito Perez', 15, 'guatemalteco');y alli veras los posibles errores que te pueda dar en consola mysql. Arregla la cadena a modo que pueda ser una cadena valida, y luego arregla la cadena del PHP.
y eso podria causar problema
Revisa bien tus datos de entrada, ya que toma en cuenta que podrian traer apostrofos (’
Suerte.
lo que sucede es que el script tira lineas del tipo:
entre las comas, por lo que dice q el numero de campos a insertar no coincide con los que hay en la tabla
insert into Persona(nombre, edad, nacionalidad) values (’Juanito Perez; 15 ; guatemalteco’);
no separa con , sino que lo hace con ; y no coloca los apostrofes (’
ademas el for que aparece ahi no sirve porque tira todos los campos en una sola linea, para arreglarlo basta esta linea:
$data[$c]=str_replace(’;',’\',\”,$data[$c]);
antes del for
$data[$c]=str_replace(’;’,’\’,\”,$data[$c]); no entiendo que cadena esta comparando y tratando de separar el asunto es q da error no entiendo que hace por favor
podrias explicarme para tratar de arreglarlo Lore por favor
Ok Amigo, si me funciono,….. gracias por tus aportes……..
mi problema es que tengo barios txt a cada minuto se genera un txt como capturo y subo ami base de datos mysql
@rusbel:
podrías explicarlo mejor?
Los txt que hablas son archivos que contienen datos para guardar en una tabla?
Si es así… Cómo son generados esos archivos? talvez al momento de generarse, se puede guardar a la BD. No se si estoy mal.