Why does not a query to the database yield results using PDO in PHP OO?

0

It has a class called student and another call connection, I create an object of connection through the use of an autoload, when I try to make queries to the database, in spite of being well the attributes of the object this does not return any result

Connection Class:

<?php namespace Models;

    use PDO;
    class Conexion 
    {
        private $_host;
        private $_user;
        private $_pass;
        private $_dbname;
        private $_charset;

        private $_conexion; // Conexion a la base de Datos
        private $_consulta; // Consultas
        private $_errorPDO;
        private $_errorConsulta;

        public function __construct() {
            $archivo = 'config.ini.php';
            $configurar = parse_ini_file($archivo, true);

            $this->_host    = $configurar['basedatos']['host'];
            $this->_user    = $configurar['basedatos']['user'];
            $this->_pass    = $configurar['basedatos']['pass'];
            $this->_dbname  = $configurar['basedatos']['dbname'];
            $this->_charset = $configurar['basedatos']['charset'];
            try 
            {

            $this->_conexion = new PDO("mysql:host=$this->_host;
                    dbname=$this->_dbname;
                    charset=$this->_charset", 
                    $this->_user, 
                    $this->_pass);
            $this->_conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }

            catch(PDOException $e)
            {
                $errorPDO = $this->_errorPDO = $e->getMessage();
            }
        }

        public function preparar($sql) {
            $this->_consulta = $this->_conexion->prepare($sql);
        }

        public function asignar($parametro, $valor, $tipo = null){
            if(is_null($tipo)){
                switch (true) {
                    case is_int($valor):
                        $tipo = PDO::PARAM_INT;
                        break;
                    case is_bool($valor):
                        $tipo = PDO::PARAM_BOOL;
                        break;
                    case is_null($valor):
                        $tipo = PDO::PARAM_NULL;
                        break;
                    default:
                        $tipo = PDO::PARAM_STR;
                }  
            }

            $this->_consulta->bindValue($parametro, $valor, $tipo);
        }

        public function ejecutar() {
            $this->_consulta->execute();

            $errorConsulta = $this->_consulta->errorInfo();

            $this->errorConsulta($errorConsulta);
        }

        public function cerrar() {
            return $this->_conexion=null;
        }

        public function consultaSimple() {
            $resultado = $this->_consulta->fetch(PDO::FETCH_ASSOC);
            return $resultado;
        }

        public function consultaArray() {
            $resultado = $this->_consulta->fetchAll(PDO::FETCH_ASSOC);
            return $resultado;
        }

        public function contarRegistros() {
            $datos = $this->_consulta->rowCount();
            return $datos;
        }

        public function ultimoId() {
            $datos = $this->_consulta->lastInsertId();
            return $datos;
        }

        public function errorConsulta($errorConsulta){
            if(!is_null($errorConsulta)) {
                    print_r($errorConsulta);
                } else {
                    echo 'Consulta Exitosa';
                }
        }

        public function errorPDO($errorPDO){
            if(!is_null($errorPDO)) {
                    var_dump($errorPDO[2]);
                } else {
                    echo 'Consulta Exitosa';
                }
        }

        public function sanitizarDatos($datos) {
            $datos = trim($datos);
            $datos = stripslashes($datos);
            $datos = htmlspecialchars($datos);
            return $datos;
        }

        public function metodos() {
            $listar = get_class_methods(new Conexion());
            echo "Los Metodos disponibles para la clase son;"."<br><br>";
            foreach ($listar as $metodo) {
                if ($metodo !== "__construct" && $metodo !== "metodos") {
                echo "*$metodo\n"."<br><br>";
                }
            }   
        }

    }

Student Class:

<?php namespace Models;

    class Estudiante extends Conexion
    {
        private $_idEstudiante;
        private $_primerNombre;
        private $_segundoNombre;
        private $_primerApellido;
        private $_segundoApellido;
        private $_fechaNacimiento;
        private $_fotografia;
        private $_promedio;
        private $_fechaInscripcion;
        private $_seccionId;
        private $_conexion;

        public function set($atributo, $contenido) {
            $this->$atributo = $contenido;
        }

        public function get($atributo) {
            return $this->$atributo;
        }


        public function listar()
        {
            $sql = "
                 SELECT t1.*,t2.descripcionSeccion
                 as nombre_seccion 
                 FROM estudiantes t1 
                 INNER JOIN secciones t2 
                 ON  t1.seccionId = t2.idSeccion
                ";
            /*$datos = */
            $this->_conexion->consultaSimple($sql);
            /*return $datos;*/
        }

        public function registar()
        {
            $sql = "INSERT INTO usuarios (primerNombre,segundoNombre,
                    primerApellido,segundoApellido,fechaNacimiento,fotografia,promedio,
                        fechaInscripcion,seccionId) 
                    VALUES 
                    (:primerNombre,:segundoNombre,:primerApellido,:segundoApellido,
                    :fechaNacimiento,:fotografia,:promedio,:fechaInscripcion,:seccionId)";

            $primerNombre = sanitizarDatos($this->_primerNombre);
            $segundoNombre = sanitizarDatos($this->_segundoNombre);
            $primerApellido = sanitizarDatos($this->_primerApellido);
            $segundoApellido =  sanitizarDatos($this->_segundoApellido);
            $fechaNacimiento = sanitizarDatos($this->_fechaNacimiento);
            $fotografia = sanitizarDatos($this->_fotografia);
            $promedio = sanitizarDatos($this->_promedio);
            $fechaInscripcion = sanitizarDatos($this->_fechaInscripcion);
            $seccionId = sanitizarDatos($this->_seccionId);

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("primerNombre",$primerNombre);
            $this->_conexion->asignar("segundoNombre",$segundoNombre);
            $this->_conexion->asignar("primerApellido",$primerApellido);
            $this->_conexion->asignar("segundoApellido",$segundoApellido);
            $this->_conexion->asignar("fechaNacimiento",$fechaNacimiento);
            $this->_conexion->asignar("fotografia",$fotografia);
            $this->_conexion->asignar("promedio",$promedio);
            $this->_conexion->asignar("fechaInscripcion",$fechaInscripcion);
            $this->_conexion->asignar("seccionId",$seccionId);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();

        }

        public function borrar() {
            $sql = "DELETE FROM estudiantes WHERE idEstudiante=:idEstudiante";

            $idEstudiante=$this->_idEstudiante;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("idEstudiante",$idEstudiante);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();
        }

        public function editar() {

            $sql = "UPDATE FROM estudiantes 
            SET 
            primerNombre = :primerNombre, 
            segundoNombre = :segundoNombre, 
            primerApellido = :primerApellido, 
            segundoApellido = :segundoApellido WHERE idEstudiante=:idEstudiante";

            $primerNombre = $this->_primerNombre;
            $segundoNombre = $this->_segundoNombre;
            $primerApellido = $this->_primerApellido;
            $segundoApellido = $this->_segundoApellido;
            $idEstudiante = $this->_idEstudiante;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("primerNombre",$primerNombre);
            $this->_conexion->asignar("segundoNombre",$segundoNombre);
            $this->_conexion->asignar("primerApellido",$primerApellido);
            $this->_conexion->asignar("segundoApellido",$segundoApellido);
            $this->_conexion->asignar("idEstudiante",$idEstudiante);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();

        }

        /*t1.*,t2.descripcionSeccion
                 as nombre_seccion 
                 FROM estudiantes t1 
                 INNER JOIN secciones t2 
                 ON  t1.seccionId = t2.idSeccion
                 WHERE t1.*/

        public function ver() {

                $sql = "
                 SELECT primerNombre FROM estudiantes WHERE idEstudiante = :idEstudiante
                ";

            $idEstudiante = $this->_idEstudiante;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("idEstudiante",$idEstudiante);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();
        }

        public function metodos() {
            $listar = get_class_methods(new Estudiante());
            echo "Los Metodos disponibles para la clase son;"."<br><br>";
            foreach ($listar as $metodo) {
                if ($metodo !== "__construct" && $metodo !== "metodos") {
                echo "*$metodo\n"."<br><br>";
                }
            }   
        }
    }

index:

 <?php

        require_once "Config/Autoload.php";
        Config\Autoload::run();



        $conexion = new Models\Conexion();

        $estudiante = new Models\Estudiante();

        $estudiante->set("_conexion",$conexion);
        $estudiante->set("_idEstudiante", 12345);

        /*echo $estudiante->get("_idEstudiante")."<br>";

        var_dump($estudiante->get("_conexion"));*/

        $estudiante->ver();
        $estudiante->consultaSimple();



    ?>

ERROR:

  

Fatal error: Uncaught Error: Call to a member function fetch () on   null in C: \ xampp \ htdocs \ School CRUD \ Models \ Conexion.php: 80 Stack   trace: # 0 C: \ xampp \ htdocs \ School CRUD \ index.php (20):   Models \ Connection-> querySimple () # 1 {main} thrown in   C: \ xampp \ htdocs \ School CRUD \ Models \ Conexion.php on line 80

It is supposed that I should first run it and then get the results using the type of query, but it tells me that this null, I already printed the attributes of the student with GET and shows the data well, I do not know what can happen

    
asked by Victor Alvarado 13.06.2017 в 00:47
source

1 answer

0

There were some errors in the SQL queries and in the way to return the data:

Connection Class:

use PDO;
class Conexion 
{
    private $_host;
    private $_user;
    private $_pass;
    private $_dbname;
    private $_charset;

    private $_conexion; // Conexion a la base de Datos
    private $_consulta; // Consultas
    private $_errorPDO;
    private $_errorConsulta;

    public function __construct() {
        $archivo = 'config.ini.php';
        $configurar = parse_ini_file($archivo, true);

        $this->_host    = $configurar['basedatos']['host'];
        $this->_user    = $configurar['basedatos']['user'];
        $this->_pass    = $configurar['basedatos']['pass'];
        $this->_dbname  = $configurar['basedatos']['dbname'];
        $this->_charset = $configurar['basedatos']['charset'];
        try 
        {

        $this->_conexion = new PDO("mysql:host=$this->_host;
                dbname=$this->_dbname;
                charset=$this->_charset", 
                $this->_user, 
                $this->_pass);
        $this->_conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }

        catch(PDOException $e)
        {
            $errorPDO = $this->_errorPDO = $e->getMessage();
        }
    }

    public function preparar($sql) {
        $this->_consulta = $this->_conexion->prepare($sql);
    }

    public function asignar($parametro, $valor, $tipo = null){
        if(is_null($tipo)){
            switch (true) {
                case is_int($valor):
                    $tipo = PDO::PARAM_INT;
                    break;
                case is_bool($valor):
                    $tipo = PDO::PARAM_BOOL;
                    break;
                case is_null($valor):
                    $tipo = PDO::PARAM_NULL;
                    break;
                default:
                    $tipo = PDO::PARAM_STR;
            }  
        }

        $this->_consulta->bindValue($parametro, $valor, $tipo);
    }

    public function ejecutar() {
        $this->_consulta->execute();

        /*$errorConsulta = $this->_consulta->errorInfo();

        $this->errorConsulta($errorConsulta);*/
    }

    public function cerrar() {
        return $this->_conexion=null;
    }

    public function consultaSimple() {
        $resultado = $this->_consulta->fetch(PDO::FETCH_ASSOC);
        return $resultado;
        /*
        datos=$conexion->consultaSimple();
        foreach ($datos as $valor) {
        echo $valor;}
        */
    }

    public function consultaArray() {
        $resultado = $this->_consulta->fetchAll(PDO::FETCH_ASSOC);
        return $resultado;
        /*
        datos=$conexion->consultaArray();
        foreach ($datos as $valor) {
        echo $valor;}
        */
    }

    public function contarRegistros() {
        $datos = $this->_consulta->rowCount();
        return $datos;
    }

    public function ultimoId() {
        $datos = $this->_consulta->lastInsertId();
        return $datos;
    }

    public function errorConsulta($errorConsulta){
        if(!is_null($errorConsulta)) {
                print_r($errorConsulta);
            } else {
                echo 'Consulta Exitosa';
            }
    }

    public function errorPDO($errorPDO){
        if(!is_null($errorPDO)) {
                print_r($errorPDO[2]);
            } else {
                echo 'Consulta Exitosa';
            }
    }

    public function sanitizarDatos($datos) {
        $datos = trim($datos);
        $datos = stripslashes($datos);
        $datos = htmlspecialchars($datos);
        return $datos;
    }

    public function metodos() {
        $listar = get_class_methods(new Conexion());
        echo "Los Metodos disponibles para la clase son;"."<br><br>";
        foreach ($listar as $metodo) {
            if ($metodo !== "__construct" && $metodo !== "metodos") {
            echo "*$metodo\n"."<br><br>";
            }
        }   
    }

}

Student Class:

<?php namespace Models;

    class Estudiante
    {
        private $_idEstudiante;
        private $_primerNombre;
        private $_segundoNombre;
        private $_primerApellido;
        private $_segundoApellido;
        private $_fechaNacimiento;
        private $_fotografia;
        private $_promedio;
        private $_fechaInscripcion;
        private $_seccionId;
        private $_conexion;

        public function set($atributo, $contenido) {
            $this->$atributo = $contenido;
        }

        public function get($atributo) {
            return $this->$atributo;
        }


        public function listar()
        {
            $sql = "
                 SELECT t1.*,t2.descripcionSeccion
                 as descripcionSeccion
                 FROM estudiantes t1 
                 INNER JOIN secciones t2 
                 ON  t1.seccionId = t2.idSeccion
                ";
            $this->_conexion->preparar($sql);
            $this->_conexion->ejecutar();
            $this->_conexion->cerrar();
        }

        public function registrar()
        {
            $sql = "INSERT INTO estudiantes (primerNombre,segundoNombre,
                    primerApellido,segundoApellido,fechaNacimiento,fotografia,promedio,
                        fechaInscripcion,seccionId) 
                    VALUES 
                    (:primerNombre,:segundoNombre,:primerApellido,:segundoApellido,
                    :fechaNacimiento,:fotografia,:promedio,:fechaInscripcion,:seccionId)";

            $primerNombre = $this->_primerNombre;
            $segundoNombre = $this->_segundoNombre;
            $primerApellido = $this->_primerApellido;
            $segundoApellido =  $this->_segundoApellido;
            $fechaNacimiento = $this->_fechaNacimiento;
            $fotografia = $this->_fotografia;
            $promedio = $this->_promedio;
            $fechaInscripcion = $this->_fechaInscripcion;
            $seccionId = $this->_seccionId;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("primerNombre",$primerNombre);
            $this->_conexion->asignar("segundoNombre",$segundoNombre);
            $this->_conexion->asignar("primerApellido",$primerApellido);
            $this->_conexion->asignar("segundoApellido",$segundoApellido);
            $this->_conexion->asignar("fechaNacimiento",$fechaNacimiento);
            $this->_conexion->asignar("fotografia",$fotografia);
            $this->_conexion->asignar("promedio",$promedio);
            $this->_conexion->asignar("fechaInscripcion",$fechaInscripcion);
            $this->_conexion->asignar("seccionId",$seccionId);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();

        }

        public function borrar() {
            $sql = "DELETE FROM estudiantes WHERE idEstudiante=:idEstudiante";

            $idEstudiante=$this->_idEstudiante;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("idEstudiante",$idEstudiante);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();
        }

        public function editar() {

            $sql = "UPDATE estudiantes  SET 
            primerNombre = :primerNombre, 
            segundoNombre = :segundoNombre, 
            primerApellido = :primerApellido, 
            segundoApellido = :segundoApellido WHERE idEstudiante=:idEstudiante";

            $primerNombre = $this->_primerNombre;
            $segundoNombre = $this->_segundoNombre;
            $primerApellido = $this->_primerApellido;
            $segundoApellido = $this->_segundoApellido;
            $idEstudiante = $this->_idEstudiante;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("primerNombre",$primerNombre);
            $this->_conexion->asignar("segundoNombre",$segundoNombre);
            $this->_conexion->asignar("primerApellido",$primerApellido);
            $this->_conexion->asignar("segundoApellido",$segundoApellido);
            $this->_conexion->asignar("idEstudiante",$idEstudiante);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();

        }



        public function ver() {

                $sql = "SELECT t1.*,t2.descripcionSeccion
                 as descripcionSeccion 
                 FROM estudiantes t1 
                 INNER JOIN secciones t2 
                 ON  t1.seccionId = t2.idSeccion
                 WHERE idEstudiante= :idEstudiante";

            $idEstudiante = $this->_idEstudiante;

            $this->_conexion->preparar($sql);

            $this->_conexion->asignar("idEstudiante",$idEstudiante);

            $this->_conexion->ejecutar();

            $this->_conexion->cerrar();
        }

        public function metodos() {
            $listar = get_class_methods(new Estudiante());
            echo "Los Metodos disponibles para la clase son;"."<br><br>";
            foreach ($listar as $metodo) {
                if ($metodo !== "__construct" && $metodo !== "metodos") {
                echo "*$metodo\n"."<br><br>";
                }
            }   
        }
    }
    
answered by 14.06.2017 / 19:11
source