PHP - problema interacción fgetcscv

 
Vista:

problema interacción fgetcscv

Publicado por entukasamejor (1 intervención) el 22/07/2005 11:30:09
Hola a todos,

me estoy volviendo loco con la utilización de fgetcsv en php para trabajar con mysql.La aplicación "pelada", es decir, sólo conectándose a la base de datos y leyendo el contenido del fichero csv no da ningún problema.

El error viene cuando trato de manejar la información del fichero csv. Yo leo una línea, tal y como se explica en la pàgina de php.net, y lo meto en un array de forma que según el valor de los distintos atributos realizo una serie de operaciones con la base de datos mysql.

El caso es que de las 61 líneas exactas que tiene el fichero funciona bien hasta la línea 24 y peta en al 25. Si quito las últimas líneas del fichero, la aplicación termina sin ningún error.

El punto en el que falla la aplicación es el siguiente:

1.- leo la "siguiente" línea
2.- Inserto unos atributos en una tabla
(clave primaria X)
3.- Recupero la clave primaria de la nueva tupla(X)
4.- Inserto resto de atributos en otra tabla
(clave primaria Y)
5.- Recupero la clave primaria de la nueva tupla (Y)
5.- Intento establecer la relación entre estos atributos en otra tabla
(claves foraneas X,Y)
6.- obtengo el mensaje de error:

"cannot add or update a child row: a foreign key constraint fails"

De hecho me da error incluso si lo hago manualmente sobre la base de datos. Me reporta el mismo error a pesar que los registros si que los ha insertado.

Entonces no entiendo el por qué del fallo de las claves foraneas y no sé como abordar el problema

Si alguien me puede echar un cable, estaría muy agradecido. Necesito resolver esto urgentemente.

Gracias por vuestra ayuda,
Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema interacción fgetcscv

Publicado por Mike79 (669 intervenciones) el 22/07/2005 18:02:32
Ese es un problema de la estructura de tu base de datos.
Si nos platicas como es tu estructura, y que atributos tienen tus campos, talvez podramos ayudarte. Aunque te aconsejo pongas tu duda en el foro correspondiente.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema interacción fgetcscv

Publicado por entukasamejor (1 intervención) el 25/07/2005 17:39:05
Gracias por responder, sé que quizás el sitio ideal sería el foro de MySQL pero para augmentar las posibilidades de que alguien me respondiera lo he puesto en ambos. Sólo tu me has respondido. Así que ahí va:

he probado con meter LAST_INSERT_ID() dentro de la cadena misma del insert; he probado con utilizar mysql_insert_id(),etc. TODO con el mismo resultado. He hecho que el script imprima por pantalla de todo:

sea como sea, SÍ inserta la información en las tablas 't3' y 't5' y SÍ recupera sus identificadores, pero después de unas líneas: peta. He comprobado a mano, en la propia base de datos, que los registros existen y que la relación, en la tabla 't6', está establecida para los elementos anteriores del fichero csv. Pero la "nueva" relación no la puedo realizar ni a mano, me da el mismo error.

create table t3(
id_t3 int primary key auto_increment,
fi date,
fti date,
ff date,
ftf date,
descripcion varchar(255),
cantidad int)type = InnoDB;

create table t5(
id_t5 int primary key auto_increment,
fi date,
fti date,
ff date,
ftf date,
partno varchar(100),
descripcion varchar(100),
serie varchar(100)) type =InnoDB;

create table t6(
id_t6 int primary key auto_increment,
t5ident int,
t3ident int,
cantidad int) type = InnoDB;

En T3 tengo:
id datos
--- ------
...(otros datos)
126 XXXXXXXXXX
127 XXXXXXXXXX

En T5 tengo:
id datos
--- ------
...(otros datos)
19 YYYYYYYY
20 YYYYYYYY

En T6 tengo:
id id3 id5 cantidad
---- --- ---- -----------
...(otros datos)
100 126 19 60
101 127 20 12 ------------> esta debería ser la siguiente tupla, pero da el error incluso si hacemos:

" insert into t6(t5ident,t3ident,cantidad) values(20,127,12); "

a mano en la shell de la base de datos.

Para mi, esto llega a metafísica. Así que si a alguien sabe la respuesta al enigma que me lo diga.

MILLONES de gracias, desde ya.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema interacción fgetcscv

Publicado por Mike79 (669 intervenciones) el 25/07/2005 18:04:58
Me suena a un error que tuve con Oracle hace tiempo, que al estar haciendo pruebas, despues de un par de querys erroneos, lo que pasaba es que se me corrompian las tablas y sus relaciones, dropeaba la tabla la creaba de nuevo y listo, funcionaba bien todo.

Obviamente este no es el caso, ya que mysql no soporta campos relacionados. Pero pareciera serlo.

Yo intentaria ponerlo asi:
insert into t6 values ( null, 127, 20, 12)

¿Por que ? bueno simplemente por que no se me ocurre otra idea. La verdad tu query parece estar bien. Solo intentalo de otra forma, aver si hay cambio. La otra es que dropees las tablas y las crees de nuevo, aver si funciona.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar