domingo, 19 de maio de 2013

Salvando objeto no banco de dados.

Neste post vou explicar como salvar os dados do objeto. Vou utilizar o projeto anterior, onde criamos anteriormente a classe conexao responsável por conectar no banco de dados. Agora vamos criar uma nova classe chamada pessoa, no projeto escola.

<?php
class pessoa {
    
}
?>

Os atributos da classe pessoa semente para aprendizagem será id, nome e endereco. A visibilidade destes atributos serão protected.

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}
?>

Os atributos da classe pessoa possuem visibilidade protected, significa que precisamos criar os métodos get e set, para facilitar criamos estes métodos primeiro.

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}

    //métodos
    
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
?>

Com os métodos get e set criados, agora criamos o método construtor. Neste método eu devo definir seus atributos como nulo, isso será útil quando explicarei o método selecionar, num post futuro. Eu crio primeiro os métodos set e get para beneficiar do code complete do NetBeans, isso é verificado no vídeo que disponibilizo no post. Note que o método construtor eu devo utilizar os métodos set's para atribuir os valores dos atributos.

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}

    //métodos
    public function __construct($id = null, $nome = null, $endereco = null) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
?>

Agora crio o método salvar, este método será responsável por salvar os valores dos atributos definidos no objeto que eu instanciar. No método salvar precisamos instanciar um objeto da classe conexao que será responsável pela conexão ao banco. Com objeto da classe conexao criado, devemos chamar o método conectar. Este método irá chamar outros métodos que foram herdados da classe MySQLI, são eles:

  • stmt_init() - Inicializa uma declaração e retorna um objeto para uso com prepare();
  • prepare() - responsável para preparar o comando que será enviado para o SGBD;
  • bind_param() - responsável por substituir os ? (pontos de interrogação) do método prepare() pelos valores, também devemos definir os tipos de dados que serão substituídos;
  • execute() - enviar o comando para execução no SGBD;
  • close() - fechar a conexão com o banco. 

<?php
class pessoa {
    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
}

    //métodos
    public function __construct($id = null, $nome = null, $endereco = null) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }

    public function salvar()
    {
        $con = new conexao('127.0.0.1', 'root', '', 'bdEscola');
        $con->conectar();
        
        $con->stmt_init();
        $stmt = $con->prepare('insert into tbpessoa(nome, endereco) values(?, ?)');
        $stmt->bind_param('ss', $this->getNome(), $this->getEndereco());
        if($stmt->execute())
            echo 'Registro salvo!';
        else
            echo 'Impossível salvar registro!';
        $con->close();
    }

?>

Agora para testar vamos incluir no início antes da declaração da classe pessoa o arquivo conexao. Isso é necessário pois vamos utilizar um objeto conexao, para conectar ao banco.
<?php
include 'conexao.php';
class pessoa {

Agora instanciamos um objeto da classe pessoa para realizar o teste. Agora basta abrir no navegar o endereço da classe pessoa no navegador.
$p = new pessoa(null, 'Gloria Pires', 'Av. Copacabana, 1054');
@$p->salvar();

?>
Bom pessoal, é isso, disponibilizo abaixo código completo da classe pessoa e vídeo. Bom estudo!

<?php
include 'conexao.php';
class pessoa {

    //atributos
    protected $id;
    protected $nome;
    protected $endereco;
    
    //métodos
    function __construct($id = null, $nome = null, $endereco = null) {
        $this->setId($id);
        $this->setNome($nome);
        $this->setEndereco($endereco);
    }
    
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }
    
    public function salvar()
    {
        $con = new conexao('127.0.0.1', 'root', '', 'bdEscola');
        $con->conectar();
        
        $con->stmt_init();
        $stmt = $con->prepare('insert into tbpessoa(nome, endereco) values(?, ?)');
        $stmt->bind_param('ss', $this->getNome(), $this->getEndereco());
        if($stmt->execute())
            echo 'Registro salvo!';
        else
            echo 'Impossível salvar registro!';
        $con->close();
    }
}

$p = new pessoa(null, 'Gloria Pires', 'Av. Copacabana, 1054');
@$p->salvar();

?>

Nenhum comentário:

Postar um comentário

Comentemm, vamos compartilhar experiências!