Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

renan.miranda

Dicas CLASSE CRUD

Recommended Posts

Saudações..

 

Eu tenho a seguinte classe CRUD :

<?php  
  
header('Content-Type: text/html; charset=utf-8');  
  
 class Crud{   
    
   // Atributo para guardar uma conexão PDO   
   private $pdo = null;   
    
   // Atributo onde será guardado o nome da tabela    
   private $tabela = null;   
    
   // Atributo estático que contém uma instância da própria classe   
   private static $crud = null;   
      
   /*   
   * Método privado construtor da classe    
   * @param $conexao = Conexão PDO configurada   
   * @param $tabela = Nome da tabela    
   */   
   private function __construct($conexao, $tabela=NULL){   
        
     if (!empty($conexao)):  
       $this->pdo = $conexao;   
     else:  
       echo "<h3>Conexão inexistente!</h3>";  
       exit();  
     endif;   
        
     if (!empty($tabela)) $this->tabela =$tabela;   
   }   
    
   /*    
   * Método público estático que retorna uma instância da classe Crud    
   * @param $conexao = Conexão PDO configurada   
   * @param $tabela = Nome da tabela   
   * @return Atributo contendo instância da classe Crud   
   */   
   public static function getInstance($conexao, $tabela=NULL){   
     
     // Verifica se existe uma instância da classe   
     if(!isset(self::$crud)):   
        try {   
          self::$crud = new Crud($conexao, $tabela);   
        } catch (Exception $e) {   
          echo "Erro " . $e->getMessage();   
        }   
     endif;   
     
     return self::$crud;   
   }   
  
   /*  
   * Método para setar o nome da tabela na propriedade $tabela  
   * @param $tabela = String contendo o nome da tabela  
   */   
   public function setTableName($tabela){  
     if(!empty($tabela)){  
       $this->tabela = $tabela;  
     }  
   }  
    
   /*   
   * Método privado para construção da instrução SQL de INSERT   
   * @param $arrayDados = Array de dados contendo colunas e valores   
   * @return String contendo instrução SQL   
   */    
   private function buildInsert($arrayDados){   
    
       // Inicializa variáveis   
       $sql = "";   
       $campos = "";   
       $valores = "";   
              
       // Loop para montar a instrução com os campos e valores   
       foreach($arrayDados as $chave => $valor):   
          $campos .= $chave . ', ';   
          $valores .= '?, ';   
       endforeach;   
              
       // Retira vírgula do final da string   
       $campos = (substr($campos, -2) == ', ') ? trim(substr($campos, 0, (strlen($campos) - 2))) : $campos ;    
              
       // Retira vírgula do final da string   
       $valores = (substr($valores, -2) == ', ') ? trim(substr($valores, 0, (strlen($valores) - 2))) : $valores ;    
              
       // Concatena todas as variáveis e finaliza a instrução   
       $sql .= "INSERT INTO {$this->tabela} (" . $campos . ")VALUES(" . $valores . ")";   
              
       // Retorna string com instrução SQL   
       return trim($sql);   
   }   
    
   /*   
   * Método privado para construção da instrução SQL de UPDATE   
   * @param $arrayDados = Array de dados contendo colunas, operadores e valores   
   * @param $arrayCondicao = Array de dados contendo colunas e valores para condição WHERE   
   * @return String contendo instrução SQL   
   */    
   private function buildUpdate($arrayDados, $arrayCondicao){   
    
       // Inicializa variáveis   
       $sql = "";   
       $valCampos = "";   
       $valCondicao = "";   
              
       // Loop para montar a instrução com os campos e valores   
       foreach($arrayDados as $chave => $valor):   
          $valCampos .= $chave . '=?, ';   
       endforeach;   
              
       // Loop para montar a condição WHERE   
       foreach($arrayCondicao as $chave => $valor):   
          $valCondicao .= $chave . '? AND ';   
       endforeach;   
              
       // Retira vírgula do final da string   
       $valCampos = (substr($valCampos, -2) == ', ') ? trim(substr($valCampos, 0, (strlen($valCampos) - 2))) : $valCampos ;    
              
       // Retira vírgula do final da string   
       $valCondicao = (substr($valCondicao, -4) == 'AND ') ? trim(substr($valCondicao, 0, (strlen($valCondicao) - 4))) : $valCondicao ;    
              
        // Concatena todas as variáveis e finaliza a instrução   
        $sql .= "UPDATE {$this->tabela} SET " . $valCampos . " WHERE " . $valCondicao;   
              
        // Retorna string com instrução SQL   
        return trim($sql);   
   }   
    
   /*   
   * Método privado para construção da instrução SQL de DELETE   
   * @param $arrayCondicao = Array de dados contendo colunas, operadores e valores para condição WHERE   
   * @return String contendo instrução SQL   
   */    
   private function buildDelete($arrayCondicao){   
    
        // Inicializa variáveis   
        $sql = "";   
        $valCampos= "";   
              
        // Loop para montar a instrução com os campos e valores   
        foreach($arrayCondicao as $chave => $valor):   
           $valCampos .= $chave . '? AND ';   
        endforeach;   
              
        // Retira a palavra AND do final da string   
        $valCampos = (substr($valCampos, -4) == 'AND ') ? trim(substr($valCampos, 0, (strlen($valCampos) - 4))) : $valCampos ;    
              
        // Concatena todas as variáveis e finaliza a instrução   
        $sql .= "DELETE FROM {$this->tabela} WHERE " . $valCampos;   
              
        // Retorna string com instrução SQL   
        return trim($sql);   
   }   
    
   /*   
   * Método público para inserir os dados na tabela   
   * @param $arrayDados = Array de dados contendo colunas e valores   
   * @return Retorna resultado booleano da instrução SQL   
   */   
   public function insert($arrayDados){   
      try {   
    
        // Atribui a instrução SQL construida no método   
        $sql = $this->buildInsert($arrayDados);   
    
        // Passa a instrução para o PDO   
        $stm = $this->pdo->prepare($sql);   
    
        // Loop para passar os dados como parâmetro   
        $cont = 1;   
              foreach ($arrayDados as $valor):   
                    $stm->bindValue($cont, $valor);   
                    $cont++;   
              endforeach;   
    
        // Executa a instrução SQL e captura o retorno   
        $retorno = $stm->execute();   
    
        return $retorno;   
           
      } catch (PDOException $e) {   
        echo "Erro: " . $e->getMessage();   
      }   
   }   
    
   /*   
   * Método público para atualizar os dados na tabela   
   * @param $arrayDados = Array de dados contendo colunas e valores   
   * @param $arrayCondicao = Array de dados contendo colunas e valores para condição WHERE - Exemplo array('$id='=>1)   
   * @return Retorna resultado booleano da instrução SQL   
   */   
   public function update($arrayDados, $arrayCondicao){   
      try {   
    
        // Atribui a instrução SQL construida no método   
        $sql = $this->buildUpdate($arrayDados, $arrayCondicao);   
    
        // Passa a instrução para o PDO   
        $stm = $this->pdo->prepare($sql);   
    
        // Loop para passar os dados como parâmetro   
        $cont = 1;   
        foreach ($arrayDados as $valor):   
            $stm->bindValue($cont, $valor);   
            $cont++;   
        endforeach;   
              
        // Loop para passar os dados como parâmetro cláusula WHERE   
        foreach ($arrayCondicao as $valor):   
            $stm->bindValue($cont, $valor);   
            $cont++;   
        endforeach;   
    
        // Executa a instrução SQL e captura o retorno   
        $retorno = $stm->execute();   
    
        return $retorno;   
           
      } catch (PDOException $e) {   
        echo "Erro: " . $e->getMessage();   
      }   
   }   
    
   /*   
   * Método público para excluir os dados na tabela   
   * @param $arrayCondicao = Array de dados contendo colunas e valores para condição WHERE - Exemplo array('$id='=>1)   
   * @return Retorna resultado booleano da instrução SQL   
   */   
   public function delete($arrayCondicao){   
      try {   
    
        // Atribui a instrução SQL construida no método   
        $sql = $this->buildDelete($arrayCondicao);   
    
        // Passa a instrução para o PDO   
        $stm = $this->pdo->prepare($sql);   
    
              // Loop para passar os dados como parâmetro cláusula WHERE   
              $cont = 1;   
              foreach ($arrayCondicao as $valor):   
                $stm->bindValue($cont, $valor);   
                $cont++;   
              endforeach;   
    
        // Executa a instrução SQL e captura o retorno   
        $retorno = $stm->execute();   
    
        return $retorno;   
           
      } catch (PDOException $e) {   
        echo "Erro: " . $e->getMessage();   
      }   
   }   
  
   /*  
   * Método genérico para executar instruções de consulta independente do nome da tabela passada no _construct  
   * @param $sql = Instrução SQL inteira contendo, nome das tabelas envolvidas, JOINS, WHERE, ORDER BY, GROUP BY e LIMIT  
   * @param $arrayParam = Array contendo somente os parâmetros necessários para clásusla WHERE  
   * @param $fetchAll  = Valor booleano com valor default TRUE indicando que serão retornadas várias linhas, FALSE retorna apenas a primeira linha  
   * @return Retorna array de dados da consulta em forma de objetos  
   */  
   public function getSQLGeneric($sql, $arrayParams=null, $fetchAll=TRUE){  
      try {   
    
        // Passa a instrução para o PDO   
        $stm = $this->pdo->prepare($sql);   
    
        // Verifica se existem condições para carregar os parâmetros    
        if (!empty($arrayParams)):   
    
          // Loop para passar os dados como parâmetro cláusula WHERE   
          $cont = 1;   
          foreach ($arrayParams as $valor):   
            $stm->bindValue($cont, $valor);   
            $cont++;   
          endforeach;   
        
        endif;   
    
        // Executa a instrução SQL    
        $stm->execute();   
    
        // Verifica se é necessário retornar várias linhas  
        if($fetchAll):   
          $dados = $stm->fetchAll(PDO::FETCH_OBJ);   
        else:  
          $dados = $stm->fetch(PDO::FETCH_OBJ);   
        endif;  
    
        return $dados;

          
           
      } catch (PDOException $e) {   
        echo "Erro: " . $e->getMessage();   
      }   
   }   
 }  
Os parâmetros que tenho para retorno de dados são esses :

require_once "Conexao.class.php";  
require_once "Crud.class.php";  
  
// Atribui uma conexão PDO   
$pdo = Conexao::getInstance();  
  
// Atribui uma instância da classe Crud, passando como parâmetro a conexão PDO e o nome da tabela  
$crud = Crud::getInstance($pdo, 'TAB_USUARIO');  
  
// Inseri os dados do usuário
$arrayUser = array('nome' => 'João', 'email' => 'joao@gmail.com', 'senha' => base64_encode('123456'), 'privilegio' => 'A');  
$retorno   = $crud->insert($arrayUser);  
  
// Editar os dados do usuario com id 1 
$arrayUser = array('nome' => 'João da Silva', 'email' => 'joao@gmail.com.br', 'senha' => base64_encode('654321'), 'privilegio' => 'A');  
$arrayCond = array('id=' => 1);  
$retorno   = $crud->update($arrayUser, $arrayCond);  
  
// Exclui o registro do usuário com id 1 
$arrayCond = array('id=' => 1);  
$retorno   = $crud->delete($arrayCond);  
  
// Consulta os dados do usuário com id 1 e privilegio A 
$sql        = "SELECT nome, email, privilegio FROM TAB_USUARIO WHERE id = ? AND privilegio = ?";  
$arrayParam = array(1, 'A');  
$dados      = $crud->getSQLGeneric($sql, $arrayParam, FALSE);   
Eu consegui fazer o INSERT, o DELETE, ainda não fiz o UPDATE, mas estou com uma dúvida no SELECT, o mesmo está pegando perfeitamente os dados através do $dados->nome, mas eu ainda não consegui fazer a sintaxe através do rowCount para saber quantos dados retornaram, pois não sei qual parametro ele deve pegar, já fiz alguns testes tentando contar diretamente o $dados por exemplo, e não deu certo.

 

Alguém pode me dá uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.