Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/07/2008, 14:58
hardlock
 
Fecha de Ingreso: febrero-2003
Ubicación: La serena
Mensajes: 144
Antigüedad: 21 años, 3 meses
Puntos: 0
Call to a member function fetch()

Hola amigos. Estoy recien empezando con POO en PHP, me parece muy interesante.
Les cuento, tengo dos clases creadas utilizando PDO, una es para manejar la base de datos. (conecta_bd.php)
Código PHP:
<?
class Capa_datos {
    public static 
$db;        
    function 
conectaDb()
    {
        try {
            
$db = new PDO('mysql:dbname=datos;host=xxx.xx.xx.xxx''admin''xxxxx');
            
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERYTRUE);
            return(
$db);
        } catch (
PDOException $e) {
            print 
"<p>Error: No puede conectarse con la base de datos." $e->getMessage() ." </p>\n";    
            exit();
        }
    }
    
     function 
consulta($query){
        
$instancia=$this->conectaDb();
          
$res=$instancia->query($query); 
        return(
$res);
    }
    
    function 
ejecuta_query($query){    
        
        
$instancia2=$this->conectaDb();
        
$count=$instancia2->exec($query); 
        return(
$count);
        
    }    
    
}

?>
y otra que entre otras cosas busca la existencia del valor de un campo que en la base esta marcado como "SI" (validador.php)

Código PHP:
 <?php    
include('class/conecta_bd.php');
class 
Validador{        
    private 
$ins_db;
    
    public function 
__construct(){
        
$ins_db=null;
    }

    function 
find_existe($id,$campo_id$tabla$campo_buscado)
    
/*busca la existencia (SI) en el campo señalado
     * donde $id representa el valor clave, $tabla: la tabla donde se busca
     * $campo_id es el nombre del campo clave y $campo_buscado es el nombre del campo que desemos evaluar    
     */

    
{
        
$ok=false;
        
$ins_db = new Capa_datos;
        
$str_sql "select $campo_buscado from $tabla where $campo_id = $id";                
        unset (
$result);
        
$result=$ins_db->consulta($str_sql);
        
$rows $result->fetch();
        
$dato $rows[0];
        if (
$dato=='SI'){
            
$ok=true;
        }
        return(
$ok);
    }    
}  
?>
el tema que tengo 2 programas que realizan la misma funcion. buscar si los registros estan marcados con un SI o NO. (asi esta la BD de origen :) )

estos programas llaman a validador.php que a su vez llama a conecta_bd.php

Ej.
Código PHP:
<?php
/*verificación de procedimiento 1*/
include ('class/validador.php');
$db = new Capa_datos;
$vl = new Validador;
$result=$db->consulta("SELECT * FROM inconcistencia_general where PROCED_TERM = '003'");
    foreach (
$result as $valor) {
        
$id=$valor[0];    
        
        
$var_rut=$valor[3];    
        
        echo 
$id;
            
        unset(
$errores);
        
$cont_error=0;
        
             
        
$sent $vl->find_existe($id,'ID','inconcistencia_general',CAMPO1');                
        if ($sent==false){
            $cont_error++;
            $errores[$cont_error]='
no registra ....';
        }
        $vl->NULL;


        $cita_js = $vl->find_existe($id,'
ID','inconcistencia_general','CAMPO2);                                                                       
        if (
$cita_js==false){
            
$cont_error++;
            
$errores[$cont_error]='No registra constancia 2';
        }
        
        
        
/*asi repite estas validaciones varias veces*/
        
        
if ($cont_error>0){
            echo 
"se econtraron $cont_error errores en el RUT $valor[3];";
            
$str_error='"'.implode(",",$errores).'"'
            
$sql "INSERT INTO `reporte_inconcistencia` ";
            
$sql.= "(`N1`, `N2`, `N3`, `N4`, `N5`, `error`)";
            
$sql.= "VALUES ('$var_rut', '', '', '', '', '$str_error')";
            
$cont=$db->ejecuta_query($sql);
            echo 
$sql;    
        echo 
'<br>';    
        }
    }

$db->NULL;


?>
el otro script es similar lo tengo separado ya que se ejecutaran indistintamente.

Código PHP:
<?php
include ('class/validador.php');
$db = new Capa_datos;
$val = new Validador;
$result=$db->consulta("SELECT * FROM inconcistencia_general where PROCED = '002'");

    foreach (
$result as $valor) {
        
$id=$valor[0];    
        
        
$var_rut=$valor[3];    
            
        unset(
$errores);
        
$cont_error=0;
        
        
        
$sent $val->find_existe($id,'ID','inconcistencia_general','CAMPO1');        
        
        
        if (
$sent==false){
            
$cont_error++;
            
$errores[$cont_error]='describe error 1...';
        }
        
$cita $val->find_existe($id,'ID','inconcistencia_general','CAMPO2');        
        if (
$cita==false){
            
$cont_error++;
            
$errores[$cont_error]='describe error 2...';
        }
        
            

        if (
$cont_error>0){
            echo 
"se econtraron $cont_error errores en el ruc $valor[3];";
            
$str_error='"'.implode(",",$errores).'"'
            
$sql "INSERT INTO `reporte_inconcistencia` ";
            
$sql.= "(`rut`, `n1`, `n2`, `n3`, `n4`, `error`)";
            
$sql.= "VALUES ('$var_rut', '', '', '', '', '$str_error')";

            
$cont=$db->ejecuta_query($sql);
            echo 
$sql;
    
        echo 
'<br>';    
        }
        


        
    }


$db->NULL;


?>
bueno. el tema esta en que el segundo script corre perfectamente valida e ingresa los resultados a una tabla, y el primero , siendo a mi juicio practicamente igual me arroja el error
Call to a member function fetch()
me pueden orientar para ver si el problema es en la creacion de las clase o que ?

saludos y se agradece.
__________________
Hoy dia aprendí algo nuevo.