Desenvolvimento - PHP

Classe PHP para conexão com o MySQL

Abordagem de como criar uma classe PHP que facilita muito na hora de fazer a conexão com o banco de dados MySQL.

por André Baltieri



Voltando a falar de classes no PHP.
Uma classe bem simples, mas porém funcional, é a de conexão com o MySQL.
Vamos ao que interessa.

Como na outra classe que criamos, nessa também faremos, em primeiro lugar, uma verificação de segurança, para ver se algum "espertinho" está tentando acessar nossa classe diretamente pela URL.

Para tal verificação, escrevemos o seguinte código:

1. //Verificação de Segurança
2. $url = $_SERVER["PHP_SELF"];
3. if(eregi("class.Upload.php", "$url"))
4. {
5. header("Location: ../index.php");
6. }
Para maiores informações sobre este trecho, leia este artigo: Classe de Upload de Imagem no PHP.

Vamos então ao que realmente interessa.
Para se conectar ao banco de dados MySQL, precisamos saber 4 coisas.
São elas:
Host (servidor) - Lugar onde o banco de dados está.
Usuário - Usuário para entrar no MySQL.
Senha - Senha do MySQL.
Database - A base de dados que criamos.

Partimos de um ponto, onde se supõe que você já esteja com o MySQL devidamente instalado e configurado, e sabendo os dados acima.
Vamos então ao início da classe.

1. class MySQL
2. {
3.
4. }

Como toda classe, começamos com class e em seguida informamos o nome da classe.

Agora vamos criar algumas variáveis, que precisaremos para manusear as informações dentro dessa classe.

Estas variáveis são:

1. class MySQL
2. {
3. var $host="localhost";
4. var $user="usuario";
5. var $password="senha";
6. var $database="basededados";
7.
8. var $query;
9. var $link;
10.var $result;
11.}

Bem, as 4 primeiras variáveis já foram explicadas acima, além delas, criei as variáveis $query, que será responsável por arqmazenar no SQL, $link, que será responsável por fazer nossa conexão com o banco, e por fim $result, que armazenará o resultado da nossa transação.

A primeira função a ser criada, será a função MySQL, que não fará nada além de apenas instânciar o objeto em nossa página.

Mãos a obra:

1. class MySQL
2. {
3. var $host="localhost";
4. var $user="usuario";
5. var $password="senha";
6. var $database="basededados";
7.
8. var $query;
9. var $link;
10. var $result;
11.
12. function MySQL()
13. {
14. //Apenas instancia o Objeto
15. }
16. }

Nada demais até agora.

Bem, antes de sairmos executando alguma coisa em nosso banco, precisamos primeiro estar conectado a ele.
Para isso, criaremos a função para a conexão:

1. //Esta função faz a conexão com o Banco de Dados
2. function connect()
4. {
5. $this->link=mysql_connect($this->host,$this->user,$this->password);
6. if(!$this->link)
7. {
8. echo "Falha na conexao com o Banco de Dados!<br />";
9. echo "Erro: " . mysql_error();
10. die();
11. }
12. elseif(!mysql_select_db($this->database, $this->link))
13. {
14. echo "O Banco de Dados solicitado não pode ser aberto!<br />";
15. echo "Erro: " . mysql_error();
16. die();
17. }
18. }

Já na linha 2, informo que estou criando uma função, e em seguida passo no nome da função, que no meu caso é connect.
Na linha 5, faço com que a variável que criei acima chama link receba o resultado da conexão com o banco de dados, através da sintaxe $this->link.
Na linha 6, verifico se a conexão falhou, e caso ela tenha falhado, será exibida uma mensagem de erro.
Caso contrários, na linha 12, verifico se a base de dados que informei já no começo da classe(Variável $database) é uma base de dados válida, ou existente, e caso não seja, novamente envio uma mensagem de erro.
Feitos estes 2 teste (1 - Tentar se conectar ao banco e 2 - Tentar selecionar a base de dados), nossa conexão está pronta, porém, agora precisamos de uma nova função, que irá fazer consultar, atualizar, selecionar, deletar e etc. em nosso banco de dados.

Para essa função, vamos utilizar a variável $query, que receberá uma instrução SQL, executará esta instrução no banco, e nos retornará (em caso de seleção) os dados da tabela.

1. //Esta função executa uma Query
2. function executeQuery($query)
3. {
4. $this->connect();
5. $this->query=$query;
6. if($this->result=mysql_query($this->query))
7. {
8. $this->disconnect();
9. return $this->result;
10. }
11. else
12. {
13. echo "Ocorreu um erro na execução da SQL";
14. echo "Erro :" . mysql_error();
15. echo "SQL: " . $query;
16. die();
17. disconnect();
18. }
19. }

Na linha 2, definimos a função e informamos seu nome, no meu caso, executeQuery. Também passamos a esta função, um parâmetro, no caso $query.
Na linha 4, chamamos a função connect, que criamos acima, pois não temos como executar uma instrução sem estar conectado ao banco antes.
Na linha 5, atribuimos o valore recebido por parâmetro a nossa variável criada no topo chamada query.
Na linha 6, tento executar a instrução SQL recebida, através do comando mysql_query e armazeno o resultado dessa conexão na variável que criamos no começo da classe chamada result.
Em seguida, na linha 8, desconectamos do banco, e retornamos o valor contido em resul, que é o resultado da nossa instrução enviada aos banco.
Caso a instrução não possa ser executada, exibimos uma mensagem de erro ao usuário, e em seguida desconectamos do banco.
Repara-se que nas linhas 8 e 19, chamamos uma outra função, chamada disconnect, que será responsável por desconectar-nos da base de dados. Esta é a última função restante.

1. //Esta função desconecta do Banco
2. function disconnect(){
3. return mysql_close($this->link);
4. }

A simples função acima, desconecta-nos do banco de dados, através do comando mysql_close.

Até o momento então, nossa classe deve estar assim:
Nome do Arquivo: class.MySQL.php
1. <?php
2. /*
3. Por: André Luis Alves Baltieri
4. Descrição: Classe para conexão do PHP ao MySQL
5. Ultima Alteração: 17/10/2007
6. */
7. ?>
8. <?php
9. //Verificação de Segurança
10. $checkurl = $_SERVER["PHP_SELF"];
11. if(eregi("class.MySQL.php", "$checkurl"))
12. {
13. header("Location: ../index.php");
14. }
15.
16. class MySQL
17. {
18. var $host="SERVIDOR";
19. var $user="USUARIO";
20. var $password="SENHA";
21. var $database="BASE DE DADOS";
22.
23. var $query;
24. var $link;
25. var $result;
26.
27. function MySQL()
28. {
29. //Apenas instancia o Objeto
30. }
31.
32. //Esta função faz a conexão com o Banco de Dados
33. function connect()
34. {
35. $this->link=mysql_connect($this->host,$this->user,$this->password);
36. if(!$this->link)
37. {
38. echo "Falha na conexão com o Banco de Dados!<br />";
39. echo "Erro: " . mysql_error();
40. die();
41. }
42. elseif(!mysql_select_db($this->database, $this->link))
43. {
44. echo "O Bando de Dados solicitado não pode ser aberto!<br />";
45. echo "Erro: " . mysql_error();
46. die();
47. }
48. }
49.
50. //Esta função executa uma Query
51. function executeQuery($query)
52. {
53. $this->connect();
54. $this->query=$query;
55. if($this->result=mysql_query($this->query))
56. {
57. $this->disconnect();
58. return $this->result;
59. }
60. else
61. {
62. echo "Ocorreu um erro na execução da SQL";
63. echo "Erro :" . mysql_error();
64. echo "SQL: " . $query;
65. die();
66. disconnect();
67. }
68. }
69.
70. //Esta função desconecta do Banco
71. function disconnect()
72. {
73. return mysql_close($this->link);
74. }
75. }
76. ?>

Até que foi simple, não?

Agora vamos ver a classe em uso.

1. include("class.MySQL.php");
2.
3. $mySQL = new MySQL;
4. $rsClientes = $mySQL->executeQuery("SELECT * FROM clientes;");
5. $rsClientes_totalRows = mysql_num_rows($rsClientes);
6. $mySQL->disconnect;

Podemos ver que o uso é simples, primeiramente, incluimos a classe na linha 1.
Na linha 3, instanciamos o objeto, por isso da nossa classe ter uma função em branco chamada MySQL.
Na linha 4, criamos a variável rsClientes(RecordSet) e atribuimos a ela o valor do resultado da função executeQuery que criamos em nossa classe.
Na linha 5, apenas recebo o valor de todas as linhas retornadas, com a sintaxe mysql_num_rows.
Na linha 6, desconecto do banco.

Para exibir os dados do resultado da instrução SQL enviada a nossa classe na tela, também é muito simples:
1. <?php
2. while ($row_rsClientes = mysql_fetch_array($rsClientes))
3. {
4. echo $row_rsClientes["nome"];
5. }
6. ?>

Na linha 2, atribuimos ao array $row_rsClientes todos os valores das colunas e linhas, atravéz da sintaxe mysql_fetch_array.
Na linha 4, exibimos o atributo "nome" do array row_rsClientes, atributo esse que nada mais é do que o nome do campo da tabela clientes. Se quisessemos exibir o e-mail do cliente, colocariamos row_rsClientes["email"] e assim por diante.
Esse laço rodará o número de linhas retornado vezes.

Esta classe facilita muito o trabalho com MySQL.
Ela pode ser bem mais implementada, aí fica a critério de cada uma.
Espero que teham gosta.

Um forte abraço.
Até mais.
André Baltieri

André Baltieri - Trabalha com desenvolvimento de aplicações web a mais de 7 anos, e com ASP.NET desde 2003. É líder da comunidade Inside .NET (http://www.insidedotnet.com.br/) e do projeto Learn MVC .NET (http://learn-mvc.net/). Bacharelando em Sistemas de Informação, atualmente trabalha com desenvolvimento e suporte de aplicações web em ASP.NET/C# em projetos internacionais e ministra treinamentos e consultorias sobre a plataforma .NET.