Ir para conteúdo
Fórum Script Brasil
  • 0

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


didonsom

Pergunta

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";
        }
   }

?>     

 

Editado por didonsom
problema resolvido, alterando o assunto
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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();
    } 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...