Primeiramente desculpe pela demora, mas o bicho tá pegando, quase recebemos nossa segunda doação de R$10,00 mas infelizmente foi cancelada rssss. Então continuamos com apenas 1 doação em praticamente 1 ano de BLOG rsss, mas enfim fazer o que né.
Bem galera não está dando para seguir o planejamento das aulas devido ao tempo que está curto, estou tento que pegar vários freelas baratinhos para pagar as contas, e isso acaba que toma o tempo todo.
Hoje vou postar para vocês um exemplo de como podemos abstrair tarefas simples e rotineiras como o update, delete, insert e select em um banco de dados.
Para os críticos, obsecados por designer patterns, segurança e tudo mais, antes de me fazer perder meu tempo lendo seu comentário leia com bastante atenção a linha abaixo:
"Estas classes tem como propósito apenas o estudo de como utilizar orientação a objetos para abstrair tarefas rotineiras, estas classes não são a solução do universo e o mundo inteiro vai utilizar, é apenas para as pessoas que acompanham o blog começarem a se interagir com o que aprenderam + prática"
Bem dito isto, vamos lá nossa idéia então é fazer uma classe para conectar no banco e outra para minimizar a tarefa de atualizar, deletar, inserir e selecionar, minha conexão não permite gravar vídeo então vou postar os códigos coloquei o máximo de comentários possível rsss por isso parece grande, mas creio que todos vão conseguir entender, senão é só mandar um comentário.
Como ficou tudo embolado então estou disponibilizando os arquivos para download, se tiver link quebrado ou coisas do tipo manda um comentário:
DOWNLOAD 1 - Classe Mysql
DOWNLOAD 2 - Classe Mysql
Como ficou tudo embolado então estou disponibilizando os arquivos para download, se tiver link quebrado ou coisas do tipo manda um comentário:
DOWNLOAD 1 - Classe Mysql
DOWNLOAD 2 - Classe Mysql
Criando nossa classe de conexão
conexao.class.php
<?php
class Conexao
{
/**
* Constante responsável por armazenar o servidor do banco
*
*/
const DB_HOST='localhost';
/**
* Constante responsável por armazenar o nome do banco
*
*/
const DB_NOME='emig';
/**
* Constante responsável por armazenar o nome do usuário do banco
*
*/
const DB_USER='root';
/**
* Constante responsável por armazenar a senha do banco
*
*/
const DB_PASS='';
/**
* Método construtor, executado "automaticamente" quando iniciada classe
*/
function __construct()
{
}
/**
* Método responsável por conectar no banco
*/
public function Conecta()
{
//lembrando que self referencia a própria classe no nosso caso
//estamos chamando uma constante que está definida nesta classe
//então conectar ao banco
$con = mysql_connect(self::DB_HOST,self::DB_USER,self::DB_PASS) or die ('Erro ao conectar: ' .mysql_error());
//Agora vamos selecionar o banco de dados
$db = mysql_select_db(self::DB_NOME) or die ('Erro ao selecionar o banco: ' .mysql_error());
}
}
?>
class Conexao
{
/**
* Constante responsável por armazenar o servidor do banco
*
*/
const DB_HOST='localhost';
/**
* Constante responsável por armazenar o nome do banco
*
*/
const DB_NOME='emig';
/**
* Constante responsável por armazenar o nome do usuário do banco
*
*/
const DB_USER='root';
/**
* Constante responsável por armazenar a senha do banco
*
*/
const DB_PASS='';
/**
* Método construtor, executado "automaticamente" quando iniciada classe
*/
function __construct()
{
}
/**
* Método responsável por conectar no banco
*/
public function Conecta()
{
//lembrando que self referencia a própria classe no nosso caso
//estamos chamando uma constante que está definida nesta classe
//então conectar ao banco
$con = mysql_connect(self::DB_HOST,self::DB_USER,self::DB_PASS) or die ('Erro ao conectar: ' .mysql_error());
//Agora vamos selecionar o banco de dados
$db = mysql_select_db(self::DB_NOME) or die ('Erro ao selecionar o banco: ' .mysql_error());
}
}
?>
Bem acho que não tem praticamente nada para eu explicar ai não né? rsss
Agora vamos criar a classe que vai fazer aquela tarefa de atualizar, remover, inserir e selecionar
manipulasql.class.php
<?php
class ManipulaSql extends Conexao
{
/**
* Propriedade responsável por retornar os resultados das querys
*
*/
public $content;
/**
* Método responsável por executar um SELECT no banco de dados
*
* Utilização:
*
* $sql = "SELECT Codigo, Nome, Descricao FROM produtos";
* $s = new ManipulaSql();
* $s->Seleciona($sql);
* if(!empty($s->content))
* {
* foreach ($s->content as $v)
* {
* echo 'Código: ' .$v[0]. '
';
* echo 'Nome: ' .$v[1]. '
';
* echo 'Descrição: ' .$v[2]. '
';
* echo '
';
* }
* } else {
* echo 'Não foram encontrados registros em sua pesquisa.';
* }
*
* @param string $qry
* @return array
*/
public function Seleciona($qry)
{
//como extendemos a classe Conexao, então podemos utilizar
//os metodos herdados pela mesma (não vou entrar em detalhes sobre visibilidade)
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//faço um loop nos resultados e vou armazendo em nossa variável $content
//que é responsável por nos retornar os dados da consulta
while($row = mysql_fetch_array($exec)) {
$this->content[] = $row;
}
//retorno os dados
return $this->content;
}
/**
* Método responsável executar um INSERT no banco
*
* Utilização:
*
* $sql = "INSERT INTO tabela(campo1) VALUES ('algo1')";
* $i = new ManipulaSql();
* $i->Insere($sql);
* if(!empty($i->content))
* {
* echo 'O registro ' .$i->content. ' foi adicionado a base de dados.';
* } else {
* echo 'Nenhum registro foi adicionado.';
* }
*
* @param string $qry
* @return int
*/
public function Insere($qry)
{
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//reonsável por armazenar o ID gerado
//em nossa variável de retorno $this->content
$this->content = mysql_insert_id();
//retorna o id do cadastro
return $this->content;
}
/**
* Método responsável executar um UPDATE no banco
*
* Utilização:
*
* $sql = "UPDATE tabela SET campo1='algo1' WHERE campo='algo'";
* $a = new ManipulaSql();
* $a->Atualiza($sql);
* if(!empty($a->content))
* {
* echo 'Foi(ram) atualizado(s) ' .$a->content. ' registro(s)';
* } else {
* echo 'Nenhum registro foi atualizado.';
* }
*
* @param string $qry
* @return int
*/
public function Atualiza($qry)
{
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//reonsável por armazenar o número de linhas alteradas
//em nossa variável de retorno $this->content
$this->content = mysql_affected_rows();
//retorna o id do cadastro
return $this->content;
}
/**
* Método responsável executar um DELETE no banco
*
* Utilização:
*
* $sql = "DELETE FROM nome_tabela WHERE campo='algo'";
* $r = new ManipulaSql();
* $r->Remove($sql);
* if(!empty($r->content))
* {
* echo 'Foi(ram) removido(s) ' .$r->content. ' registro(s).';
* } else {
* echo 'Nenhum registro foi removido.';
* }
*
* @param string $qry
* @return int
*/
public function Remove($qry)
{
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//reonsável por armazenar o número de linhas alteradas
//em nossa variável de retorno $this->content
$this->content = mysql_affected_rows();
//retorna o id do cadastro
return $this->content;
}
}
class ManipulaSql extends Conexao
{
/**
* Propriedade responsável por retornar os resultados das querys
*
*/
public $content;
/**
* Método responsável por executar um SELECT no banco de dados
*
* Utilização:
*
* $sql = "SELECT Codigo, Nome, Descricao FROM produtos";
* $s = new ManipulaSql();
* $s->Seleciona($sql);
* if(!empty($s->content))
* {
* foreach ($s->content as $v)
* {
* echo 'Código: ' .$v[0]. '
';
* echo 'Nome: ' .$v[1]. '
';
* echo 'Descrição: ' .$v[2]. '
';
* echo '
';
* }
* } else {
* echo 'Não foram encontrados registros em sua pesquisa.';
* }
*
* @param string $qry
* @return array
*/
public function Seleciona($qry)
{
//como extendemos a classe Conexao, então podemos utilizar
//os metodos herdados pela mesma (não vou entrar em detalhes sobre visibilidade)
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//faço um loop nos resultados e vou armazendo em nossa variável $content
//que é responsável por nos retornar os dados da consulta
while($row = mysql_fetch_array($exec)) {
$this->content[] = $row;
}
//retorno os dados
return $this->content;
}
/**
* Método responsável executar um INSERT no banco
*
* Utilização:
*
* $sql = "INSERT INTO tabela(campo1) VALUES ('algo1')";
* $i = new ManipulaSql();
* $i->Insere($sql);
* if(!empty($i->content))
* {
* echo 'O registro ' .$i->content. ' foi adicionado a base de dados.';
* } else {
* echo 'Nenhum registro foi adicionado.';
* }
*
* @param string $qry
* @return int
*/
public function Insere($qry)
{
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//reonsável por armazenar o ID gerado
//em nossa variável de retorno $this->content
$this->content = mysql_insert_id();
//retorna o id do cadastro
return $this->content;
}
/**
* Método responsável executar um UPDATE no banco
*
* Utilização:
*
* $sql = "UPDATE tabela SET campo1='algo1' WHERE campo='algo'";
* $a = new ManipulaSql();
* $a->Atualiza($sql);
* if(!empty($a->content))
* {
* echo 'Foi(ram) atualizado(s) ' .$a->content. ' registro(s)';
* } else {
* echo 'Nenhum registro foi atualizado.';
* }
*
* @param string $qry
* @return int
*/
public function Atualiza($qry)
{
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//reonsável por armazenar o número de linhas alteradas
//em nossa variável de retorno $this->content
$this->content = mysql_affected_rows();
//retorna o id do cadastro
return $this->content;
}
/**
* Método responsável executar um DELETE no banco
*
* Utilização:
*
* $sql = "DELETE FROM nome_tabela WHERE campo='algo'";
* $r = new ManipulaSql();
* $r->Remove($sql);
* if(!empty($r->content))
* {
* echo 'Foi(ram) removido(s) ' .$r->content. ' registro(s).';
* } else {
* echo 'Nenhum registro foi removido.';
* }
*
* @param string $qry
* @return int
*/
public function Remove($qry)
{
//conecta no banco de dados
$con = Conexao::Conecta();
//executa a query
$exec = mysql_query($qry) or die('Erro ao executar a query: ' .mysql_error());
//reonsável por armazenar o número de linhas alteradas
//em nossa variável de retorno $this->content
$this->content = mysql_affected_rows();
//retorna o id do cadastro
return $this->content;
}
}
?>
E por fim vamos mostrar como utilizar apesar que já coloquei como utilizar na propria classe, mas vou mostrar de qualquer forma para ficar bem claro!
index.php
<?php
//Primeiramente eu incluo as nossas duas classes
require_once('conexao.class.php');
require_once('manipulasql.class.php');
#Fazendo um select
//Monto minha query de consulta
$sql = "SELECT Codigo, Nome, Descricao FROM produtos";
//Instancio a classe de manipulação
$s = new ManipulaSql();
//executo o método reponsável por selecionar os dados passando como parametro
//a nossa query
$s->Seleciona($sql);
//nosso método retorna o objeto content que contém os dados da consulta
//então vamos verificar se nossa consulta retornou alguma informação
if(!empty($s->content))
{
//caso sim, então vamos listar estes dados encontrados
foreach ($s->content as $v)
{
//se você está se perguntando o que são este 0,1,2 é simples, observe nossa
//query: SELECT Codigo, Nome, Descricao FROM produtos, olhou viu alguma
//relação com o 0,1 e 2? Pois bem, este índices da array, nos retornam
//exatamente na ordem que especificamos na query, como as array se iniciam
//do 0(zero), logo $v[0] é o Codigo, e assim por diante. Moleza?
echo 'Código: ' .$v[0]. '
';
echo 'Nome: ' .$v[1]. '
';
echo 'Descrição: ' .$v[2]. '
';
echo '
';
}
//Caso a nossa consulta não tenha retornado nenhum resultado, então exibe o erro
} else {
echo 'Não foram encontrados registros em sua pesquisa.';
}
#fazendo um insert
//Monto minha query de inserir
$sql = "INSERT INTO tabela(campo1) VALUES ('algo1')";
//Instancio a classe de manipulação
$i = new ManipulaSql();
//executo o método reponsável por inserir os dados passando como parametro
//a nossa query de inserir
$i->Insere($sql);
//nosso método retorna o objeto content que contém informações sobre a ação efetuada
//no caso o INSERT
//então vamos verificar se nossa consulta retornou alguma informação
if(!empty($i->content))
{
echo 'O registro ' .$i->content. ' foi adicionado a base de dados.';
//Caso a nosso insert não tenha sido efetuado, então exibe o erro
} else {
echo 'Nenhum registro foi adicionado.';
}
#fazendo um update
//Monto minha query de Atualizar
$sql = "UPDATE tabela SET Campo='Algo' WHERE Campo='algumacosa'";
//Instancio a classe de manipulação
$a = new ManipulaSql();
//executo o método reponsável por atualizar os dados passando como parametro
//a nossa query de update
$a->Atualiza($sql);
//nosso método retorna o objeto content que contém informações sobre a
//ação efetuada no caso o UPDATE
//então vamos verificar se nosso update retornou alguma informação
if(!empty($a->content))
{
echo 'Foi(ram) atualizado(s) ' .$a->content. ' registro(s)';
//Caso a nosso UPDATE não tenha sido efetuado, então exibe o erro
} else {
echo 'Nenhum registro foi atualizado.';
}
#fazendo um delete
//Monto minha query de Remover
$sql = "DELETE FROM nome_tabela WHERE campo='algo'";
//Instancio a classe de manipulação
$r = new ManipulaSql();
//executo o método reponsável por atualizar os dados passando como parametro
//a nossa query de DELETE
$r->Remove($sql);
//nosso método retorna o objeto content que contém informações sobre a
//ação efetuada no caso o DELETE
//então vamos verificar se nosso delete retornou alguma informação
if(!empty($r->content))
{
echo 'Foi(ram) removido(s) ' .$r->content. ' registro(s).';
//Caso a nosso DELETE não tenha sido efetuado, então exibe o erro
} else {
echo 'Nenhum registro foi removido.';
}
?>
//Primeiramente eu incluo as nossas duas classes
require_once('conexao.class.php');
require_once('manipulasql.class.php');
#Fazendo um select
//Monto minha query de consulta
$sql = "SELECT Codigo, Nome, Descricao FROM produtos";
//Instancio a classe de manipulação
$s = new ManipulaSql();
//executo o método reponsável por selecionar os dados passando como parametro
//a nossa query
$s->Seleciona($sql);
//nosso método retorna o objeto content que contém os dados da consulta
//então vamos verificar se nossa consulta retornou alguma informação
if(!empty($s->content))
{
//caso sim, então vamos listar estes dados encontrados
foreach ($s->content as $v)
{
//se você está se perguntando o que são este 0,1,2 é simples, observe nossa
//query: SELECT Codigo, Nome, Descricao FROM produtos, olhou viu alguma
//relação com o 0,1 e 2? Pois bem, este índices da array, nos retornam
//exatamente na ordem que especificamos na query, como as array se iniciam
//do 0(zero), logo $v[0] é o Codigo, e assim por diante. Moleza?
echo 'Código: ' .$v[0]. '
';
echo 'Nome: ' .$v[1]. '
';
echo 'Descrição: ' .$v[2]. '
';
echo '
';
}
//Caso a nossa consulta não tenha retornado nenhum resultado, então exibe o erro
} else {
echo 'Não foram encontrados registros em sua pesquisa.';
}
#fazendo um insert
//Monto minha query de inserir
$sql = "INSERT INTO tabela(campo1) VALUES ('algo1')";
//Instancio a classe de manipulação
$i = new ManipulaSql();
//executo o método reponsável por inserir os dados passando como parametro
//a nossa query de inserir
$i->Insere($sql);
//nosso método retorna o objeto content que contém informações sobre a ação efetuada
//no caso o INSERT
//então vamos verificar se nossa consulta retornou alguma informação
if(!empty($i->content))
{
echo 'O registro ' .$i->content. ' foi adicionado a base de dados.';
//Caso a nosso insert não tenha sido efetuado, então exibe o erro
} else {
echo 'Nenhum registro foi adicionado.';
}
#fazendo um update
//Monto minha query de Atualizar
$sql = "UPDATE tabela SET Campo='Algo' WHERE Campo='algumacosa'";
//Instancio a classe de manipulação
$a = new ManipulaSql();
//executo o método reponsável por atualizar os dados passando como parametro
//a nossa query de update
$a->Atualiza($sql);
//nosso método retorna o objeto content que contém informações sobre a
//ação efetuada no caso o UPDATE
//então vamos verificar se nosso update retornou alguma informação
if(!empty($a->content))
{
echo 'Foi(ram) atualizado(s) ' .$a->content. ' registro(s)';
//Caso a nosso UPDATE não tenha sido efetuado, então exibe o erro
} else {
echo 'Nenhum registro foi atualizado.';
}
#fazendo um delete
//Monto minha query de Remover
$sql = "DELETE FROM nome_tabela WHERE campo='algo'";
//Instancio a classe de manipulação
$r = new ManipulaSql();
//executo o método reponsável por atualizar os dados passando como parametro
//a nossa query de DELETE
$r->Remove($sql);
//nosso método retorna o objeto content que contém informações sobre a
//ação efetuada no caso o DELETE
//então vamos verificar se nosso delete retornou alguma informação
if(!empty($r->content))
{
echo 'Foi(ram) removido(s) ' .$r->content. ' registro(s).';
//Caso a nosso DELETE não tenha sido efetuado, então exibe o erro
} else {
echo 'Nenhum registro foi removido.';
}
?>