Foros del Web » Programando para Internet » PHP »

Problema con fechas vacias al importar archivo.csv

Estas en el tema de Problema con fechas vacias al importar archivo.csv en el foro de PHP en Foros del Web. Saludos Estoy tratando de importar un archivo csv a una tabla en mysql en la cual tengo uno de los campos como tipo date. El ...
  #1 (permalink)  
Antiguo 31/01/2007, 11:12
 
Fecha de Ingreso: agosto-2004
Mensajes: 79
Antigüedad: 20 años, 3 meses
Puntos: 0
Pregunta Problema con fechas vacias al importar archivo.csv

Saludos

Estoy tratando de importar un archivo csv a una tabla en mysql en la cual tengo uno de los campos como tipo date. El proceso se inicia, pero falla cuando en una parte del archivo encuentra una fecha vacia, mostrando el siguiente error:

Incorrect date value: '' for column 'fecha_ingreso' at row 105

Aunque el campo del problema fecha_ingreso, tenga configurado como valor por defecto '0000-00-00'

la instrucción que uso es:

mysql_query("LOAD DATA INFILE '".$dir."' INTO TABLE ingreso FIELDS TERMINATED BY ','",$link) or die(mysql_error());

Lo extraño es que pruebo importándolo directamente desde SQLYog con la misma sentencia y funciona correctamente.

¿Podrían darme una sugerencia para solucionar este caso?
  #2 (permalink)  
Antiguo 31/01/2007, 12:30
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Problema con fechas vacias al importar archivo.csv

SqlYog utliliza un parseo del csv (hasta donde se), aparte que en sus últimas versiones tiene un manejo de errores un poco mas sofisticado.
Podrás poner el sql que genera tu tabla?

Otra es la versión de mysql que estas usando (si no la sabes un select version() o un "show variables" en sqlYog te lo dirá)

PD: El load data infile es muy veloz, pero no suelo usarlo por esta razón, queda todo muy expuesto (por eso es veloz, como viene lo vuelca). Son muchos datos como para que parsees el csv?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 31/01/2007, 13:44
 
Fecha de Ingreso: agosto-2004
Mensajes: 79
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Problema con fechas vacias al importar archivo.csv

Esta es la tabla del problema:

CREATE TABLE `ingreso` (
`codigo` int(20) default NULL,
`fecha_ingreso` date default '0000-00-00',
`codcargo` varchar(30) default NULL,
`cargo` varchar(80) default NULL,
`nombre` varchar(30) default NULL,
`apellido` varchar(30) default NULL,
`sueldo` double(10,2) default '0.00'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Estoy usando Mysql 5.

Intenté importar abriendo el archivo y recorrerlo línea por línea, pero hay un campo que incluye saltos de línea y ocasiona error cuando llega allí. Además demora varios minutos en el proceso de grabación en la base de datos
  #4 (permalink)  
Antiguo 31/01/2007, 13:45
 
Fecha de Ingreso: agosto-2004
Mensajes: 79
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Problema con fechas vacias al importar archivo.csv

Estamos hablando de mas de 20.000 registros
  #5 (permalink)  
Antiguo 31/01/2007, 14:05
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Problema con fechas vacias al importar archivo.csv

Claro, el línea a línea te demora más, aunque tenés un control de los datos. Al problema, yo intentaría agregándole un not null al campo fecha_ingreso:
Código:
CREATE TABLE `ingreso` (
  `codigo` int(20) default NULL,
  `fecha_ingreso` date NOT NULL default '0000-00-00',
  `codcargo` varchar(30) default NULL,
  `cargo` varchar(80) default NULL,
  `nombre` varchar(30) default NULL,
  `apellido` varchar(30) default NULL,
  `sueldo` double(10,2) default '0.00'
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
PD: Y si, son varios registros, si validas esto será lo mejor.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 07/02/2007, 15:50
 
Fecha de Ingreso: agosto-2004
Mensajes: 79
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Problema con fechas vacias al importar archivo.csv

Con el not null sucede lo mismo.

Corriéndolo línea por línea me sale un error porque en un campo aparecen unos saltos de línea que confunden a las funciones de php y lo hacen cambiar de línea antes de terminar de leer el registro
  #7 (permalink)  
Antiguo 07/02/2007, 16:09
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: Problema con fechas vacias al importar archivo.csv

Fijate si esto te sirve:
los parámetros son nombre del archivo csv, $vector_campos=array('nombre de campo1','nombre del campo2','nombre del campo n'), y el nombre de la tabla.
Código PHP:
function tomar_datos_archivo($nombre_archivo,$vector_campos,$tabla){
    
$formatocampos=implode(',',$vector_campos);
    
$strquery="insert into $tabla ($formatocampos) values";
    
$vec_uno=file($nombre_archivo);
    for(
$i=0;$i<count($vec_uno);$i++){
        
$formatovalores='';
        
$miarray=explode(';',$vec_uno[$i]);
            for(
$j=0;$j<(count($vector_campos));$j++){
                
$formatovalores.=mysql_real_escape_string(trim($miarray[$j]))."','";
            }
        
$formatovalores=substr($formatovalores,0,(strlen($formatovalores)-3));
        
$strquery.=" ('$formatovalores') ,";
    }
$strquery=substr($strquery,0,(strlen($strquery)-1)).';';
mysql_query($strquery);
echo 
'listo';

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:45.