• Jueves 14 de Noviembre de 2024, 17:11

Autor Tema:  Error De Conexión Con Mysql  (Leído 1594 veces)

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Error De Conexión Con Mysql
« en: Miércoles 13 de Junio de 2007, 01:31 »
0
Bueno chicos, he aquí un bug que tengo en un proyectico...

Resulta que me piden que cargue un archivo CSV en 3 tablas de una base de datos, para eso recurro a una serie de ciclos que obtienen cada registro del archivo, y cada registro lo almacena en la base de datos. Cuando el archivo es bastante grande (digamos que > 5000 registros), eventualmente empiezan a salir warnings de este tipo:

Código: Text
  1. Can't connect to MySQL server on 'localhost' (10048) in (no creo que necesiten conocer el nombre del archivo) on line 56
  2.  
  3.  
y obviamente se salta el registro.

Alguien tiene una idea de como depurar este "bonito" bicho :scream:  ? O sea, puede ser memoria ? bug del conector de MySQL ?

De antemano, gracias
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

LeGatoRojo

  • Miembro HIPER activo
  • ****
  • Mensajes: 552
  • Nacionalidad: mx
    • Ver Perfil
    • LeGatoRojo
Re: Error De Conexión Con Mysql
« Respuesta #1 en: Miércoles 13 de Junio de 2007, 01:50 »
0
Tal vez el código podría servir de muchisima ayuda, pero por lo que veo, tal vez estes en un bucle repitiendo la conexión, bueno como sea, el código¿?
Un día desperte y en lugar de dientes tenía colmillos, en lugar de manos, tenía garras; pero lo más impactante fue el color escarlata de mi pelaje.

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Error De Conexión Con Mysql
« Respuesta #2 en: Miércoles 13 de Junio de 2007, 16:26 »
0
Bueno, no creo que ayude mucho (son muchas operaciones que hay detrás de cada inserción y no quiero llenar 4 páginas de código que hay distribuidos en 3 .php distintos, es la forma en que se trabaja OO en la oficina), pero ahí les va lo que se ejecuta en cada iteración.

Esto en un archivo que se llama FachadaBD.php
Código: Text
  1. class FachadaBD
  2. {
  3.   var $_obj_fachada_bd; //Objeto que se encarga de realizar todas las operaciones en la base de datos ya sea con MYSQL o Postgres
  4.   var $_obj_DB_oci8;
  5.   var $_con_transaccion;//flag para manejar si la operación a ejecutar esta siendo ejecutada en una transacción
  6.  
  7. ...
  8.  
  9. function insertar ($datos_a_insertar)
  10.   {
  11.     //print_r($datos_a_insertar);
  12.     //Intenta abrir la conexión a la BD o recuperar el id de la conexión si es con transacción
  13.     if ($this->conectar()==false)
  14.     {
  15.       $this->desconectarOCancelarTransaccion(); // Termina la ejecución
  16.       $this->asignarError(0);
  17.       return 0;
  18.     }
  19.  
  20.     $atributos_tabla=$this->_obj_fachada_bd->obtenerAtributos();
  21.     $nombre_tabla=$this->_obj_fachada_bd->obtenerNombreTabla();
  22.     if($nombre_tabla==null)
  23.     {
  24.       $this->desconectarOCancelarTransaccion();
  25.       $this->asignarError(-1);
  26.       return -1;
  27.     }
  28.     if($atributos_tabla==null)
  29.     {
  30.       $this->desconectarOCancelarTransaccion();
  31.       $this->asignarError(-2);
  32.       return -2;
  33.     }
  34.  
  35.     //Construcción de la instrucción SQL
  36.     $sql=$this->construirSQLDeInsertar($datos_a_insertar,$atributos_tabla,$nombre_tabla);
  37.     //echo $sql."<br>";
  38.     if($sql=="")
  39.     {
  40.       $this->desconectarOCancelarTransaccion();
  41.       $this->asignarError(-5);
  42.       return -5;
  43.     }
  44.  
  45.     // Ejecutar la Instrucción SQL en el SMBD
  46.     $resultado_operacion=$this->ejecutarOperacion($sql);
  47.  
  48.     //Hubo un error entre el SMBD y la instrucción SQL ingresada
  49.     if( $resultado_operacion==false)
  50.     {
  51.       $this->desconectarOCancelarTransaccion();
  52.       $this->asignarError(-3);
  53.       return -3;
  54.     }
  55.  
  56.     if (!($this->_con_transaccion))//No se manejo transacción
  57.     {
  58.       $this->desconectar();
  59.     }
  60.  
  61.     return 1;
  62.   }//Fin insertar()
  63.  
  64. ...
  65.  
  66. }
  67.  

Y este es del archivo FachadaBDMySQL.php (una clase cuya instancia se encuentra en FachadaBD bajo el nombre de _obj_fachada_bd):
Código: Text
  1. class FachadaBDMySQL
  2. {
  3.   var $resultado_conexion;
  4.   var $mensaje_de_error;
  5.   var $atributos_tabla;
  6.   var $nombre_tabla;
  7.   var $nombre_secuencia;
  8. ...
  9.  
  10.   function conectar ($host,$nombre_bd,$usuario_bd,$password_bd)
  11.   {
  12.     $this->resultado_conexion = mysql_connect($host, $usuario_bd, $password_bd);
  13.     if($this->resultado_conexion==false)
  14.     {
  15.       return false;
  16.     }
  17.  
  18.     $seleccion_bd=mysql_select_db($nombre_bd,$this->resultado_conexion);
  19.  
  20.     if($seleccion_bd==false)
  21.     {
  22.       return false;
  23.     }
  24.  
  25.     return $this->resultado_conexion;
  26.   }//Fin conectar()
  27.  
  28. ...
  29.  
  30. }
  31.  

Los parámetros $host, $nombre_bd, $usuario_bd y $password_bd son variables globales que se declaran en un archivo Config.php.

Creo que con esto es suficiente para ilustrar la operación que se realiza iterativamente. Por si las moscas, pongo a su disposición los 2 archivos mencionados.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

LeGatoRojo

  • Miembro HIPER activo
  • ****
  • Mensajes: 552
  • Nacionalidad: mx
    • Ver Perfil
    • LeGatoRojo
Re: Error De Conexión Con Mysql
« Respuesta #3 en: Miércoles 13 de Junio de 2007, 23:26 »
0
Solo tengo una pregunta, mandas a llamr la funcion insertar por cada dato que lees, o todos los almacenas en un array y despues mandas a llamar insertar, de no ser como el ultimo caso creo que es por que mandas muchas veces a conectar.
Un día desperte y en lugar de dientes tenía colmillos, en lugar de manos, tenía garras; pero lo más impactante fue el color escarlata de mi pelaje.

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Error De Conexión Con Mysql
« Respuesta #4 en: Viernes 15 de Junio de 2007, 17:26 »
0
Bueno... 2 días después, pero aquí toy B)

Cita de: "Darktigerhell"
Solo tengo una pregunta, mandas a llamr la funcion insertar por cada dato que lees, o todos los almacenas en un array y despues mandas a llamar insertar, de no ser como el ultimo caso creo que es por que mandas muchas veces a conectar.

Se hace de la primera forma (un insertar por cada dato leído).

Te cuento que ya solucioné el problema... y funciona perfecto en MySQL
Código: Text
  1. insert into nombre_tabla (nombre_dato1, nombre_dato2, ....) values (dato1, dato2, ....), (otro_dato1, otro_dato2, ....), ....
  2.  
Me doy cuenta que esos scripts son bastante ineficientes cuando se trata de gestionar una cantidad gigante de datos <_< . Voy a jalarle las orejas a mi jefe :devil:
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

LeGatoRojo

  • Miembro HIPER activo
  • ****
  • Mensajes: 552
  • Nacionalidad: mx
    • Ver Perfil
    • LeGatoRojo
Re: Error De Conexión Con Mysql
« Respuesta #5 en: Viernes 15 de Junio de 2007, 17:51 »
0
Bien hecho, un solo query para insertar la bd...
Un día desperte y en lugar de dientes tenía colmillos, en lugar de manos, tenía garras; pero lo más impactante fue el color escarlata de mi pelaje.