Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
didonsom

(Resolvido) Conexão e consulta com PHP, PDO e MYSQL

Question

Olá Pessoal Boa tarde!

Estou com um erro que não consigo identificar de jeito nenhum. Preciso realizar mais de uma consulta em classes diferentes em uma tela. O Meu problema está acontecendo quando a segunda consulta é executada, pois o e o Php retorna, Call to a member function prepare() on null por que o parâmetro de conexão que está em __construct está retornando null na segunda classe (peguei isso através de um var_dump) por isso que o "prepare" e consequentemente a consulta não funcionam.

Queria saber o que estou fazendo de errado para não consegui consultar mais de uma classe na mesma tela. Estou usando PDO e banco mysql.

Essa é a minha classe de conexão

<?php
// Classe que realiza a conexão com o banco de dados
Class Conexao {

    private static $con;

    // Impede que a classe seja instanciada
    private function __construct() { }

    // Impede que a classe seja  clonada
    private function __clone() { }

    //Impede a utilização do Unserialize (que a variavel retorne o array original)
    private function __wakeup() { }


    public static function getConexao() {
        if (!isset(self::$con)) {
            try{ 
               // parametros de conexão
               $tipo = 'mysql:host=localhost;dbname=teste';
               $user = 'root';
               $senha = '';


            self::$con = new PDO( $tipo, $user, $senha, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_PERSISTENT => TRUE));
            self::$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$con->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING);


        } 
          catch ( PDOException $erro ){
                 echo $erro;
                 // Encerrando a aplicação
                 exit();
             }
          return self::$con;
    }

  }    // finalizando o getConexao  



   protected function closeConexao() {
      if($this->con != null) $this->con = null;
    }

    public function __destruct() {
      $this->closeConexao();
    } 


} // finalizando a classe conexão

?>

Essa é a classe na qual realizo a 1º consulta

<?php

// ARQUIVO DE CLASSE SLIDE_CRUD - UTILIZADA PARA ADICIONAR AS IMAGENS E CONSULTAS ATRAVÉS DO LOGIN NO PAINEL-ADMIN

// chamando o arquivo de conexão

class Slide_crud extends Slide{

    public static $conexaoPDO;
    // Instanciando a conexao  e a classe
    public function __construct(){


    $this->conexaopdo = conexao::getConexao();   

    }    

//******************************************************************************************************//
//*********************************************CONSULTA GERAL******************************************//
//****************************************************************************************************// 


public function consultaslide(){
    try{

    // realizando o SQL
    $sql = ('SELECT * FROM tbl_slide');

    // Realizando a conexão

    $prepare_sql = $this->conexaopdo->prepare($sql);

    $prepare_sql->execute();

    return $prepare_sql->fetchAll(PDO::FETCH_OBJ);

    } catch(exception $e){
    echo" $e erro ao realizar a consulta, se o problema persistir contate o administrador do sistema";

    }


}

}

Essa é a classe na qual realizo a 2º consulta.

<?php

    // Criando a Classe Seo_Crud - Classe responsável pelas interações com o banco de DADOS


Class Seo_crud extends Seo{


    // parametro na qual será responsável por iniciar a conexão com o banco de dados
    static $conexaoPDO;  

    // função responsável por instanciar a classe em questão
    public function __construct(){

     // instanciando o parametro de conexão;
    $this->conexaopdo = Conexao::getConexao(); 
    }

//******************************************************************************************************//
//********************************************CONSULTA GERAL*******************************************//
//****************************************************************************************************//

public function consultaseo(){
 try{
         // consulta SQL
         $sql = ('SELECT * FROM tbl_seo');

         // repassando a consulta para a conexão

         $prepare_sql = $this->conexaopdo->prepare($sql);

         // executando a instrução
         $prepare_sql->execute();

         // retorno da função
         return $prepare_sql->fetchAll(PDO::FETCH_OBJ);


    }catch(PDOexception $e){
            print_r($e);
            echo"$e Atenção! Ocorreu um Erro ao realizar essa consulta de dados, tente novamente, se o problema persisitir contate o Administrador do Sistema";
            }


    } // fim function consulta

}
?>

aqui está os trechos na qual estou instanciando as classes no arquivo index.php para obter os dados através de um foreach.

	<?php     
			// instanciando a classe responsável pelo Crud e pelas Consultas
            $slide_crud = new Slide_crud();

            // repassando os parâmetros para a consulta e armazenando na variavel $result
            $result = $slide_crud->consultaslide();

            // percorrendo o array através de um laço para exibir as imagens
            foreach($result as $dados){
            ?>     
             <div class="cycle-anterior" <a href="#" id="anterior"></a></div>
            <div class="cycle-proximo" <a href="#" id="proximo"></a></div>
            <img src="<?=$dados->caminho ?>" class="img-thumbnail" height="260" width="960" data-cycle-desc= <?=$dados->descricao?>>
            <?php

            }




<?php 

   // instanciando a classe responsável pela consulta;
   $seo_crud = new Seo_crud();
  // realizando a consulta e armazenando os dados em uma variavel
   $result_seo = $seo_crud->consultaseo();

   if(!Empty($result_seo)){
        foreach($result_seo as $dados){
       echo "$dados->rodape_centro";
        }
   }

?>     

 

Edited by didonsom
problema resolvido, alterando o assunto

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Galera descobri o erro ...

O erro estava justamente no closeConexao(), pois a Conexão Pdo não é destruída automaticamente e eu estava destruindo da forma errada com ($this-> con) quando o correto deveria ser $self::$con.. por ser estática.. 

estava destruindo de forma errada... 

 

    protected function closeConexao() {
      if(self::$con != null) self::$con = null;
    }

    public function __destruct() {
      $this->closeConexao();
    } 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148504
    • Total Posts
      644173
×
×
  • Create New...