Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Classe Crud com PDO e MYSQLi - #3

06/05/2018

Hoje vamos trabalhar com "Prepared Statements" que é um requisito básico para trabalhar com banco de dados usando PHP. Elas evitam o SQL Injection e são obrigatórias a partir do PHP 7+.

Prepared Statements no PHP

Primeiramente vamos criar o arquivo ClassCrud dentro da pasta Class e vamos incluí-la e instanciá-la na nossa index.php. Essa classe extenderá a ClassConexao feita na última aula:

<div class="Content">
    <?php
        include("Class/ClassConexao.php");
        include("Class/ClassCrud.php");
        $Crud=new ClassCrud();
    ?>
</div>

PDO

No PDO utilizaremos as declarativas preparatórias da seguinte forma:

class ClassCrud extends ClassConexao{
    #Atributos
    private $Crud;
    private $Contador;

    #Preparação das declativas
    private function preparedStatements($Query , $Parametros)
    {
        $this->countParametros($Parametros);
        $this->Crud=$this->conectaDB()->prepare($Query);

        if($this->Contador > 0){
            for($I=1; $I <= $this->Contador; $I++){
                $this->Crud->bindValue($I,$Parametros[$I-1]);
            }
        }

        $this->Crud->execute();
    }

    #Contador de parâmetros
    private function countParametros($Parametros)
    {
        $this->Contador=count($Parametros);
    }
}

No código acima criamos o método countParametros que receberá a quantidade de parâmetros passados para setarmos a quantidade de bindValue. Nossa preparedStatements() receberá a query e os parâmetros.

MYSQLi

As declarativas preparatórias dinâmicas no MYSQLi são mais complicadas, pois o MYSQLi não aceita o bindValue igual o PDO, ele só aceita o bind_param que recebe dois parâmetros: o tipo do valor passado e a variável com o valor. Dessa forma, não conseguimos fazer um simples for como no PDO. Precisamos utilizar a função do PHP call_user_func_array() e passar os dados por referência.

class ClassCrud extends ClassConexao{

    #Atributos
    private $Crud;
    private $Contador;
    private $Resultado;

    #Preparação das declarativs
    private function preparedStatements($Query, $Tipos , $Parametros)
    {
        $this->countParametros($Parametros);
        $Con=$this->conectaDB();
        $this->Crud=$Con->prepare($Query);
        if($this->Contador > 0){
           $CallParametros = array();
            foreach($Parametros as $Key => $Parametro){
                $CallParametros[$Key] = &$Parametros[$Key];
            }
            array_unshift($CallParametros, $Tipos);
            call_user_func_array(array($this->Crud,'bind_param'),$CallParametros);
        }
        $this->Crud->execute();
        $this->Resultado=$this->Crud->get_result();
    }

    #Contador de parâmetros
    private function countParametros($Parametros)
    {
        $this->Contador=count($Parametros);
    }
}
Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Classe Crud com PDO e MYSQLi - #2
Hoje vamos estilizar o layout do nosso site CRUD utilizando HTML5 e CSS para isso.
Saiba mais!
Classe Crud com PDO e MYSQLi - #4
No vídeo de hoje vamos criar toda a parte de estilização do nosso layout da página de cadastro e vamos receber nossas variáveis.
Saiba mais!
Crud
Nesse curso aprenderemos como desenvolver uma ClassCrud com conexão ao banco de dados mysql através dos conectores PDO e MYSQLi.
Saiba mais!