Palavra:   

Revista PHP / PHP

Jorél Precoma

Criando Classe para Trabalhar com Banco de Dados

Crie um documento com o nome classes.inc.php (apenas exemplo didático)

adicione as seguintes variaveis e defina valores a elas
  1. <?php
  2. define("DB_HOSTI","HOST"); // host de conexão com o MySQL
  3. define("DB_USERNAMEI","USUARIO"); // nome do usuário para conexão
  4. define("DB_PASSWORDI","SENHA"); // senha do usuário para conexão
  5. define("DB_DATABASEI","BD"); // nome do bd
  6. ?>
então ai estamos apenas passando valor para as variaveis!!

Hora de criar a classe, ja vou criar também 2 variaveis que utilizarei:
  1. <?php
  2. // classe de acesso ao banco de dados
  3. class MySQL
  4. {
  5. var $dbi;
  6. var $query;
  7. }
Nessa primeira função vou "abrir" o banco de dados com as variaveis que passei:
  1. <?php
  2. // função que starta o MySql, sem ela é impossivel conectar ao banco
  3. function open()
  4. {
  5. // conecta com o bd com as variáveis prédefinidas
  6. $this->dbi = mysql_connect(DB_HOSTI, DB_USERNAMEI, DB_PASSWORDI);
  7. if (!$this->dbi) {
  8. echo "Erro na conexão!";
  9. }
  10. if (!mysql_select_db(DB_DATABASEI)) {
  11. echo "Erro na seleção do banco de dados!";
  12. }
  13. }
  14. ?>
Essa função serviu para startar o banco, agora sempre usaremos ela em nossos codigos. Agora a função que fecha o banco de dados:
  1. <?php
  2. // fecha a conexão com o bco de dados
  3. function close()
  4. {
  5. mysql_close($this->dbi);
  6. }
  7. ?>
Após usamos nosso banco é importante fechar a conexão com a função acima. A função abaixo executa a query no banco, ou seja nossos selects, updates e deletes.
  1. <?php
  2. // executa uma string SQL
  3. function query($sql)
  4. {
  5. $this->query = mysql_query($sql, $this->dbi);
  6. return $this->query;
  7. }
  8. ?>
Essa é uma parte bacana, essa função lista quantas linhas teve o resultado da consulta, vao ver no exemplo de como é util essa função.
  1. <?php
  2. // retorna quantas linhas aquela query resultou
  3. function linhas()
  4. {
  5. return mysql_num_rows($this->query);
  6. }
  7. ?>
Se a de cima era bacana, essa é mais ainda, ela lista os atributos da nossa tabela, o resultado propriamente dito, bastando passar a linha e coluna q desejamos:
  1. <?php
  2. // retorna o conteúdo do campo e linha escolhidos
  3. function result($linha, $campo)
  4. {
  5. return mysql_result( $this->query, $linha, $campo );
  6. }
  7. ?>
Vou demonstrar 2 modos de trabalhar pra vcs, então essas duas funções fazem parte do modo que utilizo:
  1. <?php
  2. // mesma coisa que o result() vou demonstrar a diferença no uso
  3. function retorno($linha, $campo)
  4. {
  5. return mysql_result($this->consulta, $linha, $campo);
  6. }
  7.  
  8. // mesma coisa que o linhas() vou demonstrar a diferença
  9. function resultado()
  10. {
  11. return mysql_num_rows($this->consulta);
  12. }
  13. ?>
Então nossa classe ficou assim:
  1. <?php
  2. /*
  3. - Classes para acesso a bancos de dados
  4. - Jorél Luiz Precoma
  5. */
  6.  
  7. define("DB_HOSTI","HOST"); // host de conexão com o MySQL
  8. define("DB_USERNAMEI","USUARIO"); // nome do usuário para conexão
  9. define("DB_PASSWORDI","SENHA"); // senha do usuário para conexão
  10. define("DB_DATABASEI","BD"); // nome do bd
  11.  
  12. class MySQL
  13. {
  14. var $dbi;
  15. var $query;
  16.  
  17. // função que starta o MySql, sem ela é impossivel conectar ao banco
  18. function open()
  19. {
  20. // conecta com o bd com as variáveis prédefinidas
  21. $this->dbi = mysql_connect(DB_HOSTI, DB_USERNAMEI, DB_PASSWORDI);
  22. if (!$this->dbi) {
  23. echo "Erro na conexão!";
  24. }
  25. if (!mysql_select_db(DB_DATABASEI)) {
  26. echo "Erro na seleção do banco de dados!";
  27. }
  28. }
  29.  
  30. // fecha a conexão com o bco de dados
  31. function close()
  32. {
  33. mysql_close($this->dbi);
  34. }
  35.  
  36. // executa uma string SQL
  37. function query($sql)
  38. {
  39. $this->query = mysql_query($sql, $this->dbi);
  40. return $this->query;
  41. }
  42.  
  43. // retorna quantas linhas aquela query resultou
  44. function linhas()
  45. {
  46. return mysql_num_rows($this->query);
  47. }
  48.  
  49. // retorna o conteúdo do campo e linha escolhidos
  50. function result($linha, $campo)
  51. {
  52. return mysql_result( $this->query, $linha, $campo );
  53. }
  54.  
  55. // mesma coisa que o result() vou demonstrar a diferença no uso
  56. function retorno($linha, $campo)
  57. {
  58. return mysql_result($this->consulta, $linha, $campo);
  59. }
  60.  
  61. // mesma coisa que o linhas() vou demonstrar a diferença
  62. function resultado()
  63. {
  64. return mysql_num_rows($this->consulta);
  65. }
  66. }
  67. ?>
O primeiro modo de se utilizar essa classe o mais "primitivo", é fazer as querys dentro do código, a desvantagem é que você nao consegue re-utilizar o codigo. No exemplo abaixo temos uma tabela de usuarios com nome, login e senha:
  1. <?php
  2. include("classes.inc.php");// inclui a class
  3.  
  4. $db = new MySQL; // instancia a class q deseja utilizar
  5. $db->open(); // abre o banco de dados
  6. $sql = "SELECT nome, login, senha FROM usuarios
  7. WHERE login = '" . addslashes($_POST["login"]) . "' AND
  8. senha = '" . addslashes($_POST["senha"]) . "'";
  9. // faz um select no BD
  10. $db->query($sql);
  11. // se existir mais d um resultado linhas() conta o numero d linhas
  12. if ($db->linhas() > 0) {
  13. // result eu peço a linha 0 e a coluna 1 no meu caso login
  14. $_SESSION["login"] = $db->result(0, 1);
  15. }
  16. ?>
Assim você pode imaginar infinitas formas de se utilizar como essa pra listar vários dados:
  1. <?php
  2. for ($i = 0; $i < $db->linhas(); $i++) {
  3. echo "nome: " . $db->result($i, 0) . " login: " . $db->result($i, 0) . "<br>";
  4. }
  5. ?>
Legal né, espero que aproveitem essas classes!

Esse modo de utilizar a classe de acesso ao banco de dados é um pouco mais trabalhoso no começo, mas poupa muito tempo depois para re-utilizar. Primeiro eu defino uma classe:
  1. <?php
  2. class Sistema extends MySQL//essa classe tera os selects, updates e delete tds nela
  3. {
  4. // variavel login vai receber um valor
  5. function SetLogin($l)
  6. {
  7. $this->login = $l;
  8. }
  9.  
  10.  
  11. function conUsuario()
  12. {
  13. $sql = "SELECT nome, login, senha FROM usuario ";
  14. if (!empty($this->login)) {
  15. $sql .= " WHERE login = '" . addslashes($this->login) . "'";
  16. }
  17. $this->consulta = mysql_query($sql);
  18. return $this->consulta;
  19. }
  20. }
  21. ?>
Na função conUsuario eu coloquei o empty, então se for setada a variavel $this->login ele vai fazer o where, isso serve se eu quizer buscar dados de um usuário apenas, se não setar essa variável ele vai ler todos registros.

Salvo o documento como "classesSite.inc.php" e no meu código da página que desejo consultar faço assim:
  1. <?php
  2. include "classes.inc.php";
  3. include "classesSite.inc.php";
  4.  
  5. $db = new Sistema;
  6. $db->open();
  7. $db->conUsuario();
  8. for ($i = 0; $i < $db->resultado(); $i++) {
  9. // aqui eu apresentos os resultados sem filtro
  10. echo $db->retorno($i, 0) . "<br>";
  11. }
  12.  
  13. // aqui é com o filtro de login
  14. $db->SetLogin("jorel");
  15. $db->conUsuario();
  16. for ($i = 0; $i < $db->resultado(); $i++) {
  17. // aqui eu apresentos os resultados com filtro
  18. echo $db->retorno($i, 0) . "<br>";
  19. }
  20. ?>
Bom pessoal espero que tenham gostado e que possam usar bem essas classes, peço desculpas se não consegui passar bem o conteúdo, mas vamos aprendendo, se alguém desejar trocar experiencias e dar sugestões fiquem a vontade!!

Obrigado a todos e até a próxima!!

Opções de Interação

Comentários

Legal mas..
Por: trambulhao, 15/10/2009   16:17:49
Compensa mesmo utilizar as funções mysql_ com a existência do MySQLi?

Com PHP6, provavelmente, as funções mysql_ tornaram obsoletas.
Bem elaborado
Por: Maiky, 18/09/2009   11:23:58
Parabéns pelo artigo! Sucesso pra vc!
Muito funcional
Por: Fabricio, 18/09/2009   11:07:26
Este artigo vai me ajudar muito nos novos projetos. Parabéns pela idéia e pela forma didática em que o artigo foi apresentado.
Muito bom
Por: Bruno, 18/09/2009   11:07:02
Muito bom
Parabens!!!
Elogio
Por: Sandro, 18/09/2009   10:59:16
Muito bom seu artigo. Fácil de prático.

Valeu!!!
Ajudou muito!!!
Por: Ana, 18/09/2009   10:58:39
Parabéns pelo artigo... de fácil entendimento e bem objetivo...