Importar una tabla CSV a MySQL con PHP
Nota: esta entrada esta obsoleta, la dejo por que puede resultar de guía para muchos que empiezan, pero hay que tener en cuenta que la escribí hace muchos años (2015) cuando daba mis primeros pasos en este trabajo. Todos empezamos en algun momento y creo que puede servir de guía a muchos que estan iniciandose, teniendo en cuenta que las conexiones a las BBDD desde PHP ha cambiado en sus ultimas versiones y que naturalmente no lo haría hoy en día así, pero si eres de esos «pros» que ni siquiera miran la fecha de publicación del artículo y que parece que naciste sabiendo, tienes dos caminos, entender las fechas y el contexto temporal (como en filosofía, si es que fuiste al instituto) o bien, como dice Conan, pudrirte en el infierno… que por cierto ¿si eres tan «pro»?¿qué haces buscando como subir un csv a MySql?
Esto es algo que realmente puede traer de cabeza a muchos, y de hecho a mi me ha tenido un poco loco durante un tiempo en el que acosado por proyectos tenía que llevar a cabo un script el cual subiera por medio de un formulario un archivo csv con una tabla a mysql con unas 6000 filas, trabajo que no iba a hacer a mano… Aparte de que mi script debía de hacer más cosas que ya os contare, la primera parte del problema era esa, subir el archivo.
Tras mucho investigar y de surcar las olas de google, encontré varias opciones y me he quedado con esta, que seguro que os puede venir muy bien y que paso a contar.
Primero debemos de hacer un archivo con nuestro formulario html, no tiene gran complicación es solo un formulario que cargará un archivo y que apunta al propio script:
<!DOCTYPE html> <body> <h1>Importando archivo CSV</h1> <form action='control.php' method='post' enctype="multipart/form-data"> Importar Archivo : <input type='file' name='sel_file' size='20'> <input type='submit' name='submit' value='submit'> </form> </body> </html>
Algo realmente sencillo, ahora es cuando viene nuestro código php, que yo he puesto en un archivo llamado control.php, pero que puede cambiar el nombre si lo modificáis en el atributo action del formulario anterior.
<?php //conexiones, conexiones everywhere ini_set('display_errors', 1); error_reporting(E_ALL); $db_host = 'HOST DONDE ESTA LA BBDD'; $db_user = 'USUARIO DE LA BBDD'; $db_pass = 'CLAVE DEL USUARIO DE LA BBDD'; $database = 'NOMBRE DE LA BBDD'; $table = 'TABLA QUE VAMOS A INTRODUCIR'; if (!@mysql_connect($db_host, $db_user, $db_pass)) die("No se pudo establecer conexión a la base de datos"); if (!@mysql_select_db($database)) die("base de datos no existe"); if(isset($_POST['submit'])) { //Aquí es donde seleccionamos nuestro csv $fname = $_FILES['sel_file']['name']; echo 'Cargando nombre del archivo: '.$fname.' <br>'; $chk_ext = explode(".",$fname); if(strtolower(end($chk_ext)) == "csv") { //si es correcto, entonces damos permisos de lectura para subir $filename = $_FILES['sel_file']['tmp_name']; $handle = fopen($filename, "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { //Insertamos los datos con los valores... $sql = "INSERT into TABLA(CAMPOS SEPARADOS POR COMAS) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]',...)"; mysql_query($sql) or die('Error: '.mysql_error()); } //cerramos la lectura del archivo "abrir archivo" con un "cerrar archivo" fclose($handle); echo "Importación exitosa!"; } else { //si aparece esto es posible que el archivo no tenga el formato adecuado, inclusive cuando es cvs, revisarlo para //ver si esta separado por " , " echo "Archivo invalido!"; } } ?>
Donde se encuentran las variables:
$db_host = 'HOST DONDE ESTA LA BBDD'; $db_user = 'USUARIO DE LA BBDD'; $db_pass = 'CLAVE DEL USUARIO DE LA BBDD'; $database = 'NOMBRE DE LA BBDD'; $table = 'TABLA QUE VAMOS A INTRODUCIR';
Debemos de introducir los datos de nuestra aplicación, y debemos de adaptar la consulta $sql para nuestro sistema introduciendo los datos de la tabla que necesitamos.
Este script es realmente sencillo y estoy seguro que podréis controlarlo muy rápidamente introduciéndole los cambios que necesitáis para vuestra aplicación.
Buenas tardes Amigo.
Estoy trabajando con un proyecto de la universidad, usamos el framework de laravel,
Necesito hacer la conexión a la base de datos, usando el gestor de ¿MongoDB, de qué manera podría adaptar tu código a mi ´proyecto de laravel?
Hola, dese laravel creo que lo mejor que podrías hacer es usar algo nativo del framwork. Te dejo este enlace para que lo puedas hacer.
https://docs.laravel-excel.com/3.1/getting-started/
Hola Miguel, ante todo agradecer tu publicación, solo tengo una duda, he instalado el wamp server para hacer unas pruebas de importación de un csv a una bd mysql que he creado con 4 campos COD, DESCRIPCION, STOCK Y DISPONIBILIDAD, he abierto el puerto 8080, para acceder al phpmyadmin y lo hago de la siguiente manera http://localhost:8080/phpmyadmin y entro perfectamente, la duda es como lo pongo en el control.php que publicas aqui, Gracias
Hola Nico, te lo digo de memoria pues no recuerdo como iba con el puerto, pero en el $db_host tienes que poner localhost o localhost:8080 Sí esto no te funciona prueba con http://localhost o http://localhost:8080 pero estoy casi seguro que te valdrá con una de los dos primeras.
¡Excelente aportación! me funcionó a la perfección, mil gracias. Saludos
De nada, me alegra que te haya servido!!
hola tiene alguna idea de como yo podria hacer esto¿?
Crear una aplicación Web en PHP:
a. Que permita importar archivos csv y mostrar los datos en una tabla html.
b. Que a esa tabla html se le puedan agregar datos con JavaScript.
c. Que los datos de la tabla html se puedan exportar a CSV.
Hola, eso ya es una aplicación en toda regla, si lo necesitas podemos hablar de un presupuesto…
No obstante para hacerlo se deben de guardar los datos de alguna forma, ya sea un jason una bbdd o un array, pintarlo con html y darle las opciones de modificación a la tabla para crear otra opción que sea guardarla.
En mi experiencia y por controlar los datos, aunque no se a que se referirían, lo ideal seria la base de datos, pero no podría decirlo sin saber el proyecto en si.
Muchas gracias funciono perfecto pero ¿se podrá quitar la primera fila del CSV? normalmente trae los encabezados..
Puedes o bien quitarle la primera línea al csv, o bien modificarlo asi:
$contador = 1;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
if($contador == 1){
//Insertamos los datos con los valores...
$sql = "INSERT into TABLA(CAMPOS SEPARADOS POR COMAS) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]',...)";
mysql_query($sql) or die('Error: '.mysql_error());
}
$contador++;
}
Aunque tambié puedes jugar con $data si quieres dejarlo más elegante.
Gracias por responder, tengo una consulta mas, probé el código con una sola celda o dato en el csv y funciona bien, pero al mandar 2 datos o mas arroja error.. Undefined offset: 1 in C:\wamp\www\excel\control.php on line 33, el error es en la linea donde van los $data, de a 1 dato si me guarda pero de a varios datos salta error ¿Qué puede ser?
$sql = «INSERT into operacionales(id,anno) values(‘$data[0]’,’$data[1]’)»;
¿Es posible que en algún dato tengas comillas de algún tipo y no las tengas sanitizadas o que el csv vaya separado por ; y no por ,?
EL problema era los punto y coma, tal como lo mencionas, muchas gracias Miguel por tu ayuda.
de nada, encantado de ayudar 🙂
Siempre se debe agradecer a quien presta su ayuda gratuitamente, por lo que me sumo a las felicitaciones, pues me sirvió para una prueba de concepto con un cliente.
gracias a ti por agradecer y comentar.
Hols me sale este error
Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\Javier\control.php:12 Stack trace: #0 {main} thrown in
Esto es debido a que usas php7 donde este tipo de conexión a base de datos ha quedado obsoleta. Estoy preparando una nueva versión de esta entrada con php7 pero ahora mismo el trabajo me tiene hasta arriba.
La idea aun así es que conectes a la BBDD por mysqli y luego seguir basicamente el mismo procedimiento.
Excelente me sirvió de mucho pero ahora tengo un inconveniente. Cuando cargo el csv y guarda en la base de datos no me respeta la ñ ni las tildes ni los caracteres especiales del español. Que puedo hacer… graciasssss
Eso es otra cuestión, a ver yo optaría por guardar el archivo csv como utf8, también miraría si la BBDD, las tablas y el campo están codificados en utf8 y luego también usaría las funciones utf8-encode y utf-decode (nunca recuerdo cual es la que sirve en cada caso), para los textos. Además intentaría ver si el fallo puede que se encuentre en la lectura de datos cuando se extraen de la bbdd. Lo cual ya nos podría llevar a las cabeceras del archivo, su decodificacion… Espero que te sirva.
Perfect, thanks! 🙂
you are welcome!
Hola buen dia, esta muy bien tu tutorial, yo tambien he estado buscando esto por mucho tiempo y me funciono pero ahora el detalle es que necesito estar subiendo mi archivo constantemente y por que ponen informacion nueva pero no borran la anterior entonces esto esta haciendo que se me duplique informacion como podria hacer para que al momento de subir mi info no se me dupliquen los datos que ya tengo en mi bd
Hola Francisco, para hacer eso deberías de leer la tabla justo antes de hacer el insert y ver si tienes el registro ya dentro, por ejemplo por medio del mail, dni, o algun campo identificativo e introducir una condicion de que solo haga el insert si el campo no existe… se me ocurre algo similar a esto dentro del while…
$revision = "SELECT * FROM tabla WHERE campo = "variable a comprobar";
obtener el número de filas en una variable llamada por ejemplo $filas y hacer la siguiente condición:
if($filas == 0){
y aqui poner el insert
}
De todas formas yo recomiendo usar ya mysqli en las conexiones con las BBDD
Hola ,¿Me podrías ayudar en un error que me sale? Esto es lo que me pone:
Cargando nombre del archivo: datos.csv
Error: Column count doesn’t match value count at row 1
Esto suele ocurrir por que el numero de campos del csv no corresponde con el numero de campos en la base de datos, comprueba que has metido un espacio para la id por ejemplo que suele ser un error comun.
todo bien pero tengo un problema me da este error (Cargando nombre del archivo: Cuentas.csv
Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘�n, débito, crédito, saldo, tipo) values(‘Fecha’,’Referencia’,’Descripci’ at line 1) que hago ya e buscado de todo y nada
mi codigo de esa linea es
$sql = «INSERT into pagos_archivos(id, fecha, referencia, descripción, débito, crédito, saldo, tipo) values(‘$data[0]’,’$data[1]’,’$data[2]’,’$data[3]’,’$data[4]’,’$data[5]’,’$data[6]’)»;
mmm prueba a cambiar el nombre de los campos de la tabla, mi consejo es q siempre sean minúsculas, sin acentos, dieresis… y el unico signo a usar el guion bajo.
El error que te da es la consulta SQL así que no es el secript, hasta ese momento, y el error te lo marca en o de descripción, con el acento, asi que quita los acentos en los campos de la tabla y la consulta
Cuéntame si te ha funcionado.
exelente gracias pero aun o puedo resolver mi error ya resolvi lo de los asentos y todo pero me da este error.
Cargando nombre del archivo: Cuentas.csv
Notice: Undefined offset: 7 in C:\xampp\htdocs\superconex\login\control.php on line 33
Notice: Undefined offset: 7 in C:\xampp\htdocs\superconex\login\control.php on line 33
Error: Duplicate entry ’27’ for key ‘PRIMARY’
y mi codigo quedo asi no se si sera un error y no me estoy dando cuenta
listo lo logre resolver solo me aparece esto en la pantalla
Notice: Undefined offset: 7 in C:\xampp\htdocs\superconex\login\control.php on line 33.
intento que se cargue un archivo bancario y tiene fecha d/m/a pero en las tablas de la base de datos lo lee al reves como hago para revertir eso
Muchas Gracias me ha servido de gran apoyo, solo tengo una duda, como puedo limitar el While para q no se carguen mas de ciertos datos?
Hay muchas formas pero creo que una bastante sencilla es con un contador inicializado fuera del mismo $contador=0 y dentro le pones un sumador al final de cada ciclo $contador++ y pones que todo lo que esta dentro del while, sería algo así:
$contador = 0;
while(…){
if($contador < = valor que quieras){
codigo a ejecutar
$contador++;
}
}
Hola ,me aparece este error al subir el archivo, : Me podrías ayudar?
Notice: Undefined index: sel_file in /var/www/vhosts/26/189379/webspace/httpdocs/2607783-0.web-hosting.es/aulavirtual/moodle/fundae/newgru.php on line 122 Cargando nombre del archivo:
Archivo invalido!
Eso es debido a que el script no está tomando sel_file como un indice de $_FILES y este índice no existe en el array, puede que en tu formulario de subida del archivo no lo hayas llamado igual.
Miguel, me podras ayudar.. una vez que le doy cargar al archivo y me pasa la pagina control.php me sale el siguiente error Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\inetpub\Claro\control.php:29 Stack trace: #0 {main} thrown in C:\inetpub\Claro\control.php on line 29
Gracias.
Eso puede ser por que no estas definiendo la consulta, de todas formas el script se ha quedado un poco antiguo, tendre que modificar la entrada y ponerla con la version de conexion a la base de datos con mysqli ya que puede ser que en php7 no funcione.
buenas, tengo un problema con el formato de el archivo csv, me mandaron a ingresar un archivo csv por php pero en la primera linea me aparecen 3 campos despues en la segunda linea me aparece otro campo que viene despues de 2 celdas vacias no se si me explique bien
Buenas muchas gracias por tu trabajo y por las respuestas que has dado.
Miguel se me esta presentando el siguiente caso, resulta que la data la carga perfectamente, pero me gustaría poder agregar unas cabeceras al archivo csv para que al abrir el archivo de forma manual se pueda entender a que corresponde cada celda, pero ¿Cómo podría hacer que se salte la primera línea al momento en que PHP tenga que recorrer la data y no me termine guardando las cabeceras en la BD?
Después de investigar un poco y analizando un poco la lógica di con lo siguiente:
$firstLine=true;
while (($data = fgetcsv($handle, 1000, «;»)) !== FALSE)
{
if(!$firstLine){
//Insertamos los datos con los valores…
$sql= «INSERT INTO cow_rel_equipoplan (NOMB_PLAN, NOMB_EQUIPOABREV, NOMB_EQUIPOFULL, VLOR_MMFFEQUIP, VLOR_EQUIPOPLAN, VLOR_CARGOFIJOCONIVA, VLOR_CFPLANXVECESSINIVA, VLOR_PORCDESCEQUIP, FECH_REGISTRO, NOMB_USUARIOREG, FECH_ACTUALIZACION, NOMB_USUARIOACTUALIZACION, ESTD_EQUIPOPLAN) «;
$sql.=»values(‘$data[0]’,’$data[1]’,’$data[2]’,’$data[3]’,’$data[4]’,’$data[5]’,’$data[6]’,’$data[7]’,’$data[8]’,’$data[9]’,’$data[10]’,’$data[11]’,’$data[12]’)»;
// echo $sql.’ ‘;
mysql_query($sql) or die(‘Error: ‘.mysql_error());
}
$firstLine=false;
}
Ahí la respuesta por si es que a futuro a alguien le surge esta duda.
Saludos =)
Es una buena opción, yo lo suelo hacer con un contador, que viene a ser más o menos lo mismo…
pongo el contador a 1; $contador = 1;
y en el while coloco la condicion if($contador>1) para hacer la insercciñon y despues del if antes de cerrar el while aumento el contador $contador++
de esa manera tambien funciona.
Hola Miguel… Estoy utilizando tu codigo … pero despues de seleccionar el archivo CSV .. va a buscar el archivo control.php y la pantalla se queda en blanco y alli se queda …. donde podra estar el error ?? …. de antemano muchas gracias por toda tu ayuda
Hola Hugo, perdona por tardar en contestar, lo primero que haría sería ver que error esta lanzando, para ello coloca las siguientes funciones al principio del archivo justo despues de abrir < ?php...
error_reporting(E_ALL);
ini_set(‘display_errors’, ‘1’);
Con eso sabras el error que esta lanzando. Es muy posible que este trabajando en un servidor de producción que no te dice los errores y dentro de los errores yo apostaría por que no encuentra el archivo csv, pero esas funciones te dirran donde este el fallo exactamente.
Hola Miguel,
Soy nuevo en esto, tengo todo, conexión, base de datos, campos creados, csv. pero me da este error al momento de subirlo.
Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘..)’ at line 1
Eso es un error en la consulta SQL, habría que ver que consulta estas reliazando, a mi me suele pasar esos errores con los siguientes signos en el contenido de los campos => ‘ » ´ `
Estos caracteres suelen dar fallos y hay que procurar escaparlos.
Tambien puede ser por que hayas escrito mal la consulta olvidando poner algo entre comillas o no cerrando alguna… sin más información es lo maximo que te puedo decir
Miguel, cual puede ser el motivo por el que me desfase la carga de datos? El archivo csv coincide con mi tabla, pero me altera el orden salteándome información. Hay diferencia en el código si los datos son muméricos o de caracteres? Gracias.
en principio no debe de haber diferencia por el tipo de datos, pero puede ser que si son números y los decimales marcan con coma en lugar de con punto te salte el campo. Mira también los campos de texto que no incluyan el separador ya que generarían el mismo fallo. Hace unos días me pasó a mi con otro script que las comas altas ‘ de los nombres en catalán de algunas localidades donde un cliente tiene sedes me daban fallo al introducirlas en la BBDD y tuve que modificar el script para saltar dicha incidencia. En este caso puede ser tan sencillo como guardar el archivo csv separando los campos por punto y coma y luego en el script decirle en la línea que parta por ; y no por ,
Espero te haya podido resultar de ayuda.
Miguel, efectivamente el problema estaba en un campo numérico. Me reconozco neófito y amateur en el tema. El problema es que por mas que modifique la configuración regional en lo que respecta al separador de listas, igual Excel me genera separador por comas. A mi disgusto, me vi obligado a modificar el símbolo decimal por punto. Por otro lado, existe algún parámetro que se pueda agregar para que sobreescriba un registro ya existente, ya que tengo un campo con condición unique. Gracias por generosidad.
eso ya entra dentro del bucle while, en él deberías de poner un condicional if con la condición que necesites y desde ahí controlar si lo que necesitas es hacer un insert, un update, un delete… en la BBDD.
Eso depende de las necesidades de tu proyecto específicamente.
Miguel, gracias por tu sugerencia. Lo resolví con un replace. Muchas gracias por tu disposición.
De nada, esta es la finalidad de esta web.
por Dioooooooooos!, juro que me ha servido tanto este códigoooo ☺ muchisimas graciaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
Me alegro que te haya servido… sobre todo tan efusivamente jejejeje
oye y como podria trabajar con fechas, si en el archivo van en formato dmy y en mysql esta por defecto YMD
puedes cambiarles el formato a la hora de introducirlas y de leerlas si te es necesario
Buenas Miguel, gracias por la aportación. El motivo de mi comentario es que a mi me junta la información de las tres columnas del csv, en una única celta de la tabla, en lugar de colocarla en cada celda. NO se si estoy haciendo algo mal?
Hola Miguel, ¿has comprobado que el separador sea el correcto? puede ser que tu csv no esté separado por comas… miralo y compruebalo en la línea 30
Perfecto! muchas gracias por todo. Un saludo
De nada
Una pregunta probando me salio eso? Que puedo hacer?
Notice: Undefined index: sel_file in C:\xampp\htdocs\v15\v15\Principal\csv.php on line 19
Cargando nombre del archivo:
Archivo invalido!
sel_file es el nombre que yo le he puesto en el formulario donde tomamos el archivo al campo que lo recoge. Es posible que tu estés utilizando otro nombre y por eso no lo identifica. Compruébalo y me comentas si era eso.
Me da el error de Archivo invalido y el archivo ya lo revise varias veces y esta bien
Donde te dice archivo invalido? a la hora de subirlo? o una vez que ha empezado a trabajar con él?
como hago si no quiero el html, es decir quiero que al abrir el php directamente se me cargue un csv, con una ruta especifica por ejemplo:
C:\carpeta\ejemplo.csv; que cada vez que yo abra el php en un explorador me cargue ese «ejemplo.csv» a la bd
Para ello deberías de eliminar la parte del if(isset $_POST[submit]) ya que no estás recibiendo nada, pero en su lugar tienes que leer el archivo en cuestión, para ello ya entraríamos en lectura de archivos con PHP y empezar a explorar desde ahí, pero basicamente sería haciendo eso.
Me sirvió !!!
Gracias !!!
Me alegro que te haya servido!!!
hola miguel gracias por tu respuesta.
pues con este codigo ya logre cargar tan sola una tabla
public function actionUpload(){
$model = new CsvForm;
if($model->load(Yii::$app->request->post())){
$file = UploadedFile::getInstance($model,’file’);
$filename = ‘Data.’.$file->extension;
$upload = $file->saveAs(‘uploads/’.$filename);
if($upload){
define(‘CSV_PATH’,’uploads/’);
$csv_file = CSV_PATH . $filename;
$filecsv = file($csv_file);
print_r($filecsv);
foreach($filecsv as $data){
$modelnew = new Docente;
$hasil = explode(«,»,$data);
$id_docente = $hasil[0];
$Nombre_docente = $hasil[1];
$Apellido_docente = $hasil[2];
$modelnew->id_docente = $id_docente;
$modelnew->Nombre_docente= $Nombre_docente;
$modelnew->Apellido_docente = $Apellido_docente;
$modelnew->save();
}
unlink(‘uploads/’.$filename);
return $this->redirect([‘site/index’]);
}
}else{
return $this->render(‘upload’,[‘model’=>$model]);
}
}
pero aun asi modificando este codigo no logro hacer lo de las dos tablas.
Solo como sugerencia… puedes intentar cargar los dos archivos en dos variables diferentes y recorrerlos por separado, eso subiría las dos tablas, pero no se hasta que punto puede resultar efectivo
hola quisiera saber si me puedes ayudar, mi problema esq algunas columnas de mi csv contienen comas, como puedo hacer para que el programa no interprete estas comas(,) como separadores al insertarlo en la base de datos.
Hola edson, en tu caso yo lo que haría es no guardar el csv separado por comas, lo haría por barras tipo | por ejemplo. Para ello puedes seguir esta guía que te explica como hacerlo
Una vez que lo tengas separado por pipes | o el carácter que quieras usar tan solo tienes que modificar el parámetro de la función fgetcsv que hace de delimitador, es decir «,» por «|» que es el nuevo, quedando así:
fgetcsv($handle, 1000, «|»)
Espero que con esto haya respondido a tu pregunta.
Muchas gracias por tu respuesa miguel, la verdad ya habia pensado en eso pero queria saber si habia una mejor solucion, para no tener que modificar settings en las computadoras de los usuarios.
Si se te ocurre algo me ayudaria muchisimo, saludos.
se podría controlar por un script cada campo pero es difícil si estos no cumplen con un patrón predeterminado…
Buenas tardes.
Amigo una pregunta como puedo subir dos archivos csv al mismo tiempo a mis tablas en framework yii2 digamos tengo una tabla docente y la otra curso necesito llenar los campos de las tablas al mismo tiempo.
espero tu pronta respuesta gracias
Hola Jose, no conozco como funciona yii2, pero si estás utilizando este script seguramente funciones con PHP de forma normal.
Subir dos tablas a la vez es bastante más complicado, yo tuve que hacer en una ocasión algo similar para un programa de gestión en la Cruz Roja, lo que hacía era subir la tabla de usuarios y una vez arriba la recorría con una consulta y un bucle que según iba identificando al usuario por el DNI gestionaba otras tres tablas diferentes para saber si el usuario estaba dado de alta o de baja, claves, datos sensibles tomados por la dirección… el script era bastante grande y de hecho el servidor tardaba mas de diez minutos en realizar la operación, por lo que se solía hacer los lunes de madrugada. Puede ser que así pudieras hacerlo, pero ir subiendo dos tablas en CSV a la vez creando una relación entre ellas puede resultar bastante más complejo.
por favor dime que se coloca en donde dice: «values(‘$data[0]’,’$data[1]’,’$dat»
Hola juan, esos son los datos que se leen desde el csv, te pongo una consulta real que yo realicé en un proyecto para que subir datos.
$sql = «INSERT into usuario_datos_personales(id, primer_apellido, segundo_apellido, nombre, trabajador, nif) values(‘$data[0]’,’$data[1]’,’$data[2]’,’$data[3]’,’$data[4]’,’$data[5]’)»;
Como puedes ver tomamos la tabla usuario_datos_personales y marcamos algunos de sus campos (la consulta real era mucho más larga) y después en values se introducen los datos que se están leyendo desde el archivo csv. Si necesitas más ayuda puedes ver como funciona INSERT INTO
Espero que te haya servido.