Foros del Web » Programando para Internet » PHP » Zend »

funciones que no andan al pasar txt a bd

Estas en el tema de funciones que no andan al pasar txt a bd en el foro de Zend en Foros del Web. Hola a todos tengo un gran problemota con un mis funciones que son para un cronjob de zend. el problema es este: tengo una funcion ...
  #1 (permalink)  
Antiguo 12/10/2011, 16:41
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
funciones que no andan al pasar txt a bd

Hola a todos tengo un gran problemota con un mis funciones que son para un cronjob de zend. el problema es este: tengo una funcion que agarra de un txt datos para alimentar una BD pero no lo hace!!!!! la bd se separa con dos tablas una temporal y la tabla padre de esta misma, la tabla temporal se alimenta del txt y la tabla padre de la tabla temporal pero no me anda.

aqui les dejo el codigo una ayuda en verdad me urge ya me traen en el trabajo y no quiero perderlo

Código PHP:
[HIGHLIGHT="PHP"]final class cronJob {//esta clase lee todos los archivo txt y los almacena en las tablas correspondientes
    
private $_cxn;//Variable privada para la conexion a la base de datos
    
private $control = array(
        
'fechaIni'=>array(),
        
'fechaFin'=>array(),
        
'fechaCarga'=>array(),
        
'registros'=>array()
    );
    private 
$_errors = array();
    private 
$_errorsDispatched false;
    private 
$_archivos = array();//son los archivos de texto que hay en el data path

    
public function __construct() {

        
$_cxn = new mysqli('localhost''root''root''pruebasalsuper');//funcion de coneccion para pruebas en local
        
$this->_archivos = array(//crea un arreglo con las direcciones de cada archivo de texto
$writer = new Zend_Log_Writer_Stream('../www/mssql.log');//log para almacenar errores en la incercion a base de datos
        
$logger = new Zend_Log($writer);    
        
        foreach(
$this->_archivos as $zip) {//desempaqueta comprimidos
            
$zip str_replace('.txt''.zip'$zip);
            if(!
file_exists($zip)) continue;
            @
exec("unzip -o {$zip} -d " DATA_PATH);
        }
        if(
file_exists(DATA_PATH '/eficontrol.zip')) {
            @
exec('unzip -o ' DATA_PATH '/eficontrol.zip -d ' DATA_PATH);
        }
    }

    public function 
__destruct() {
        if(
$this->_errorsDispatched===false) {
            
$this->_dispatchErrors();
        }
    }
/**
     * @return CronJob
     */
    
public function init() {
        
$datosControl = @fopen(DATA_PATH '/eficontrol.txt''r');//guarda lo que hay en eficontrol dentro del arreglo control
        
if($datosControl===false) die();
        while((
$data fgetcsv($datosControl))!==false) {
            
$this->control['fechaCarga'][$data[3]] = substr($data[0], 010);
            
$this->control['fechaIni'][$data[3]] = substr($data[1], 010);
            
$this->control['fechaFin'][$data[3]] = substr($data[2], 010);
            
$this->control['registros'][$data[3]] = (int)$data[4];
            
$this->control['registros2'][$data[3]] = (int)$data[5];
        }
        
fclose($datosControl);
        return 
$this;
    }

    public function 
run() {
if(
$this->control['fechaCarga']['CH']!=''$this->_cargaAsistencias();

}

// esta funcion carga los datos de la tabla temporal a la tabla original y tampoco me anda por que al comparar el contenido de la tabla temporal contra el txt obviamente me marca error ya que no existe el mismo numero datos en ambos

private function _cargaAsistencias() {
        if(!
$this->_checkFile($this->_archivos['CH'])) return;
        
$this->_loadTemp('tmp_asistencia_promotores'$this->_archivos['CH']);
        if(
$this->_getRegistros('tmp_asistencia_promotores''Sucursal')!=$this->control['registros']['CH']) {
            
$this->_errorHandle('Número de registros de la tabla de ventas no coincide con la tabla de control');
            return;
        }
        
$date = new Zend_Date();
        
$date $date -> sub(2,Zend_Date::MONTH);
        
$day$date->get('dd');
        
$date $date -> sub($day-1,Zend_Date::DAY);
        
$today = new Zend_Date();
        
$num 0;
        while (!(
$date -> equals($today,Zend_Date::MONTH)) || !($date-> equals($today,Zend_Date::DAY)) || !($date->equals($today,Zend_Date::YEAR))){
            
$date $date -> addDay(1);
            
$num++;
        } 
        try{
            
$this->_cxn->query("DELETE FROM asistencia_promotores WHERE Fecha<DATE_SUB('{$this->control['fechaCarga']['CH']}', INTERVAL {$num} DAY)");
            
$this->_cxn->query('INSERT INTO asistencia_promotores SELECT * FROM tmp_asistencia_promotores');
        }catch(
Exception $pe){
            
$logger->info("No se inserto en la tabla temporal algunos registros");
        continue;
        }
    }
    
$this->_errors[] = $msg;
    }


// funcion por si ay errores que me los manden al correo
    
private function _dispatchErrors() {
        
$headers "MIME-Version: 1.0\r\n";
        
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        
$headers .= "From: web reportes alsuper <[email protected]>\r\n";
        
$asunto 'informe de carga datos reportes alsuper.com';
        
$contenido 'Error(es) en la carga:<br/><ul><li>' implode('</li><li>'$this->_errors) . '</li></ul>';
        if(
count($this->_errors)>0) {
            @
mail('[email protected]'$asunto$contenido$headers);
            @
mail('[email protected]'$asunto$contenido$headers);
            echo 
$contenido;
        }
        
$this->_errorsDispatched true;
    }


//funcion para checar el archivo el txt en este caso
    
private function _checkFile($filePath) {
        if(!
file_exists($filePath)) {
            
$this->_errorHandle('No se encontro el archivo: ' $filePath);
            return 
false;
        }
        return 
true;
    }



/*esta funcion es la que no me anda!!!!! borra los datos dentro de la tabla temporal pero al momemento de hacer el load data local no me sube los archivos del txt a la bd alguna idea!!!
*/
    
private function _loadTemp($table$fileName) {
        
$_cxn2 = new mysqli('localhost''root''root''pruebasalsuper');//funcion de coneccion para pruebas en local
        
$_cxn2->query("TRUNCATE {$table}");
        
//se agregan los datos a los tmps
        
$res =$_cxn2->query("LOAD DATA LOCAL INFILE '{$filePath}' INTO TABLE {$table} FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n\r'");
        if(!
$res) {
            
$this->_errorHandle("Error con el Load data local infile");
        }
    }


    
//con esta funcion tenemos el total de registro que obviamente me marca cero ya que solo le e podido dar truncate pero no la puedo llenar con la informacion del txt
    
private function _getRegistros($table$column='*') {
        
$_cxn2 = new mysqli('localhost''root''root''pruebasalsuper');//funcion de coneccion para pruebas en local
        
$result $_cxn2->query("SELECT COUNT({$column}) FROM {$table}");
        if(
$result===false) throw new Exception("Error: " $this->_cxn->error "\nSQL: SELECT COUNT({$column}) FROM {$table}");
                
$numRegistros = ($row $result->fetch_row())!==null? (int)$row[0]:0;
        return 
$numRegistros;
    }
}[/
HIGHLIGHT
  #2 (permalink)  
Antiguo 12/10/2011, 17:01
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

a otra cosa el error que me devuelve es

Error con el Load data local infile


que obviamente es del If (!res) por que no se ha ejecutado

porfavor la mas ayuda que puedan darme se los estare a gradeciendo de corazon!!!
  #3 (permalink)  
Antiguo 12/10/2011, 17:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: funciones que no andan al pasar txt a bd

Y que error te esta dando ?, igual te comento que en el constructor estas asignado la conexion a una variable local y no a la propiedad $_cxn, y si estas utilizando Zend porque no utilizas Zend_Db ?.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 12/10/2011, 17:11
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

el error que me devuelve es:

Error con el Load data local infile

que obviamente es del If (!res) cuando no se ha ejecutado este query a la bd, y la conexion a la variable local no es lo que me esta realizando el error ya que las otras consultas si se llevan acabo alguna otra idea master?????????
  #5 (permalink)  
Antiguo 12/10/2011, 19:05
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: funciones que no andan al pasar txt a bd

ok tengo una dudas la primera es que si uno elige un framework es para utilizar sus funcionalidades porque no utilizas zend_db como te indico masterpuppet.

Ahora si estas trabajando con mysqli porque no depuras la consulta que estas haciendocon mysqli::error?? ejemplo:

Código PHP:
Ver original
  1. if(!$res) {
  2.             $this->_errorHandle("Error con el Load data local infile " . $_cxn2->error());
  3.         }
prueba y nos comentas a ver, aunque creo que lo mejor es que como te indico master utilices Zend_Db, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Última edición por carlos_belisario; 12/10/2011 a las 19:13
  #6 (permalink)  
Antiguo 12/10/2011, 19:08
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

la verdad no uso zend_db por que no se usarla al 100% todavia y como el problema rekiere ser solcuionado, a la voz de ya!!! no puedo ponerme a leer para aprender y trabajar en ello, y gracias por tu tip lo probare en cuanto llege a la casa, mil gracias no vez algun otro error de escritura o algo????

saludos y mil gracias chicos
  #7 (permalink)  
Antiguo 12/10/2011, 20:20
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

me sale toda esta tira de errores

Fatal error: Uncaught exception 'Exception' with message 'Error: SQL: SELECT COUNT(asistencia_promotores) FROM tmp_asistencia_promotores' in E:\AppServer\AppServ\www\cronJob.php:351 Stack trace: #0

E:\AppServer\AppServ\www\cronJob.php(276): cronJob->_getRegistros('tmp_asistencia_...', 'asistencia_prom...') #1


E:\AppServer\AppServ\www\cronJob.php(77): cronJob->_cargaAsistencias() #2 E:\AppServer\AppServ\www\index.php(24): cronJob->run() #3 {main} thrown in E:\AppServer\AppServ\www\cronJob.php on line 351


no pasa a modificarse la bd mediante el txt y tampoco devuelve el error
y la verdad no tengo ni la menor idea de lo que estoy haciendo mal, help me pls!?!??!!?

Última edición por espher; 12/10/2011 a las 20:25 Razón: respuesta mas estructurada
  #8 (permalink)  
Antiguo 12/10/2011, 20:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: funciones que no andan al pasar txt a bd

Ejecuta esa consulta en tu administrador de base de datos y verifica si te da el mismo error.
  #9 (permalink)  
Antiguo 12/10/2011, 20:38
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

no da error simplemente funciono asi fue como le puse directamente en phpmyadmin

LOAD DATA local INFILE 'E:/AppServer/AppServ/www/checadas.txt' INTO TABLE tmp_asistencia_promotores FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

carga y todo normal pero al momento de correr otravez el script me vuelve a borrar todos los datos de la tabla pero no los vuelve a insertar, osea sigo teniendo problemas con el load lata local

dios santo estoy por explotar!!!!!!!!!!!

Última edición por espher; 12/10/2011 a las 20:43 Razón: termino de respuesta
  #10 (permalink)  
Antiguo 12/10/2011, 20:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: funciones que no andan al pasar txt a bd

Si pero el error te lo da en el SELECT COUNT(), no en el LOAD DATA, es por eso que debes de verificar eso.

Saludos.
  #11 (permalink)  
Antiguo 12/10/2011, 20:51
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

este es el codigo del select count()

Código PHP:
Ver original
  1. private function _getRegistros($table, $column='*') {
  2.         $_cxn2 = new mysqli('localhost', 'root', 'root', 'pruebasalsuper');//funcion de coneccion para pruebas en local
  3.         print $column;
  4.         print $table;
  5.         $result = $_cxn2->query("SELECT COUNT({$column}) FROM {$table}");
  6.         if($result===false) throw new Exception("Error: " . $this->_cxn->error . "\nSQL: SELECT COUNT({$column}) FROM {$table}");
  7.                 $numRegistros = ($row = $result->fetch_row())!==null? (int)$row[0]:0;
  8.         return $numRegistros;
  9.     }

le acabo de poner dos prints para veridicar que es lo que devuelve $column y $table que es Sucursal y tmp_asistencia_promotores respectivamente, en $table si esta bien el valor pero en $column no estoy seguro que asi funcione

no esta mal el count si devuelve todo lo que tiene que devolver la verdad estoy echo un lio no entiendo que esta pasando

Última edición por espher; 12/10/2011 a las 21:07
  #12 (permalink)  
Antiguo 12/10/2011, 21:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: funciones que no andan al pasar txt a bd

Cambia $this->_cxn por $_cxn2 que es la conexión que estas usando para poder ver el error.
  #13 (permalink)  
Antiguo 12/10/2011, 22:07
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
Respuesta: funciones que no andan al pasar txt a bd

ya lo cambie pero sige sin funcionar mira hice una prueba de este tipo

Código PHP:
Ver original
  1. private function _loadTemp($table, $fileName) {
  2.         $_cxn2 = new mysqli('localhost', 'root', 'root', 'pruebasalsuper');//funcion de coneccion para pruebas en local
  3.         $_cxn2->query("TRUNCATE {$table}");
  4.         $_cxn2->query("LOAD DATA local INFILE 'E:/AppServer/AppServ/www/checadas.txt'
  5.                             INTO TABLE  tmp_asistencia_promotores
  6.                             FIELDS TERMINATED BY ','
  7.                             LINES TERMINATED BY '\n'");
  8. }

de esa forma trabaja correctamente pero lo chistoso es que de la forma original $filaname vale igual que la direccion recien provada y $table es la misma tabla que acabo de poner ecepto por column que el print de vuelve E:\AppServer\AppServ\www\checadas.txt con las diagonales "/" al revez osea de esta forma "\" no se si eso tenga algo que ver... bueno tiene algo que ver pero no logro captar por que...

por sierto el count no devuelve error hace el conteo perfectamente mil gracias por tu ayuda gator enserio te lo agradesco mucho
  #14 (permalink)  
Antiguo 13/10/2011, 06:49
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: funciones que no andan al pasar txt a bd

solo por cuestiones educativas debes de estar un poco mas pendiente de como defines las variables y como las llamas, fijate aca
Código PHP:
Ver original
  1. private function _loadTemp($table, $fileName) {
  2. ...
  3. $res =$_cxn2->query("LOAD DATA LOCAL INFILE /*fijate como lo llamaste aca*/ '{$filePath}' INTO TABLE {$table} FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n\r'");
que pasa no estas llamando a lo mismo, suele pasar muy seguido por eso hay que estar pendiente de eso, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: bd, funciones, html, mysql, registro, sql, tabla, txt, variables
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 15:18.