Banco de dados MySql / PHP
Por Thiago Martini da Costa 1. Tópicos parte I Breve Introdução a Banco de Dados e SGDB a. O que é um Banco de Dados b. Para que serve um SGDB c. O que é uma SQL d. Como inserir uma linha numa tabela e. Como atualizar uma linha de uma tabela f. Como recuperar uma linha ou um conjunto de linhas g. Como remover uma linha de uma tabela 2. Tópicos parte II PHP interagindo com SGDB MySQL a. Como PHP interage com banco de dados MySQL b. Como abrir uma conexão c. Como selecionar o banco de dados d. Como executar uma SQL e. Como manipular o ResultSet da execução anterior f. Como fechar a conexão aberta 3. Referência utilizada
1. Breve Introdução a Banco de Dados e SGDB
O intuito desta seção é fornecer uma breve introdução sobre Banco de Dados, explicando a necessidade de um Sistema Gerenciador de Banco de Dados (SGDB) e sua utilidade. Nesta seção será apresentada ainda a sintaxe básica dos principais comandos SQL para uma manipulação simples das tabelas do banco: INSERT, UPDATE, SELECT, DELETE. Cabe ressaltar que não será apresentado aqui toda a estrutura SQL, nem tampouco o modo de funcionamento de um SGDB e sim uma breve introdução. Maiores informações podem ser encontradas em livros sobre banco de dados e até mesmo nos manuais dos SGBD.
1.a ) O que é um Banco de Dados
Um Banco de Dados ou uma base de dados é uma coleção de dados relacionados entre si, organizada e armazenada de forma a possibilitar uma fácil manipulação. Em um Banco de Dados relacional temos uma série de tabelas onde essas tabelas têm um conjunto de linhas (tuplas) e colunas. As colunas representam as informações pertinentes a uma linha. Desta forma, as linhas devem ser identificadas univocamente por uma chave primária para que possam ser recuperadas posteriormente suas informações. A chave primária pode ser uma coluna que nunca terá seus dados repetidos ou um conjunto de colunas que juntas nunca serão repetidas. Abaixo segue o exemplo de uma tabela com suas linhas e colunas. tabela_pessoa Coluna 1 Coluna 2 Coluna 3 rg nome data_nasc Tupla 1 R01 Fulano da Silva 2005-08-24 Tupla 2 R02 Cicrano de Souza 2005-07-31 Tupla 3 R03 Beltrano da Costa 2004-03-18 No exemplo dado a coluna utilizada como chave é a coluna rg. Portanto se quisermos criar uma outra tabela que esteja relacionada a esta utilizaremos a chave para identificar o relacionamento: tabela_trabalha Coluna 1 Coluna 2 rg local_trabalho Tupla 1 R01 HC Tupla 2 R01 Hemocentro Tupla 3 R03 Farmácia Assim sabemos que Fulano da Silva trabalha no HC e no Hemocentro e que Beltrano da Costa trabalha na Farmácia.
1.b ) Para que serve um SGDB
Um Sistema Gerenciador de Banco de Dados ou SGDB é um conjunto de programas utilizados para criar e manter um banco de dados.
São exemplos de SGDB MySQL, PostgreSQL, Firebird, Oracle, DB2, SQLServer, onde os três primeiros são gratuitos. O SGDB provê um acesso otimizado aos dados propiciando uma recuperação rápida e eficiente. Ao conjunto Banco de Dados e Sistema Gerenciador de Banco de Dados chamamos de Sistema de Banco de Dados (SBD). As vantagens de se utilizar um Sistema de Banco de Dados é: Consistência: minimiza incoerências Integração: evita redundância Independência de Dados: facilita modificações Sistemas Distribuídos: organização Compartilhamento: controle de concorrência Representação de Relacionamentos Complexos Segurança: restrições específicas de acesso
1.c ) O que é uma SQL
A SQL ou Structured Query Language (Linguagem de Consulta Estruturada) é uma linguagem criada para a manipulação e o controle dos Banco de Dados relacionais. Alguns de seus principais recursos são: Alto poder de consulta Gerenciamento de índices Construção de visões Execução de instruções em blocos
1.d ) Como inserir uma linha em uma tabela
A sintaxe SQL mais simples para inserir uma tupla em uma tabela é a seguinte: INSERT INTO nome_tabela VALUES ([valor_coluna1, valor_coluna2, ...]) Nesta sintaxe deve ser colocado em nome_tabela o nome da tabela e entre parênteses todos os valores de todas as colunas da tabela. No nosso exemplo ficaria: INSERT INTO tabela_pessoa VALUES („R01‟, „Fulano da Silva‟, „2005-08-24‟) No entanto algumas vezes nós não temos todos os dados de todas as colunas e sim somente alguns (os requeridos como a chave, por exemplo), dessa forma devemos indicar quais colunas estamos inserindo da seguinte forma: INSERT INTO tabela_pessoa (rg, nome) VALUES („R04‟, „Cara sem data de nascimento‟)
1.e ) Como atualizar uma linha de uma tabela
Tão fácil quanto inserir uma linha em uma tabela é atualizar uma linha dela. A sintaxe é simples também, no entanto, é necessário que se especifique quais colunas da tupla você está atualizando e qual tupla. A sintaxe é: UPDATE nome_tabela SET nome_coluna=novo_valor WHERE condição No exemplo da tabela_trabalha poderíamos fazer uma atualização do tipo:
UPDATE tabela_trabalha SET local_trabalho=‟Farmácia‟ WHERE rg=‟R01‟
1.f ) Como recuperar uma linha ou um conjunto de linhas
Podemos fazer diversos tipos de recuperação de informação de uma tabela. Uma primeira forma mais simples é recuperar todas as colunas e todas as linhas de uma tabela. A sintaxe para este tipo de consulta é: SELECT * FROM nome_tabela Uma consulta um pouco diferente seria recuperarmos todas as linhas, mas porém apenas algumas colunas da tabela. A sintaxe é a seguinte: SELECT coluna1, coluna2, ... FROM nome_tabela. Uma outra forma diferente é selecionar todas as colunas mas somente as tuplas que satisfazem uma condição. A sintaxe é: SELECT * FROM nome_tabela WHERE condição Uma última forma de consulta simples em uma tabela é recuperar algumas colunas de algumas tuplas que satisfazem uma condição. A sintaxe é: SELECT coluna1, coluna2, ... FROM nome_tabela WHERE condição Exemplos são destas três formas de utilização são os seguintes: SELECT * FROM tabela_pessoa SELECT rg, nome FROM tabela_pessoa SELECT * FROM tabela_trabalha WHERE rg=‟R01‟ SELECT local_trabalho FROM tabela_trabalha WHERE rg=‟01‟
1.g ) Como remover uma linha de uma tabela
Para remover uma linha de uma tabela, a sintaxe e a seguinte: DELETE FROM nome_tabela WHERE condição Podemos dar como exemplo a remoção da tupla 1 da tabela trabralha DELETE FROM tabela_trabalha WHERE local_trabalho=‟HC‟ AND rg=‟R01‟
2. PHP interagindo com o SGDB MySQL
Nesta seção serão apresentadas as principais funções, ou rotinas, PHP utilizadas para interagir com o SGDB MySQL.
2.a ) Como PHP interage com o SGDB MySQL
PHP fornece uma série de funcionalidades para a interação com o SGDB MySQL. A seqüência lógica dessa interação pode ser descrita pelos seguintes passos: Primeiro passo: estabelecer uma conexão com o SGDB MySQL. Segundo passo: selecionar o banco de dados utilizado. Terceiro passo: executar a SQL desejada. Quarto passo: fechar a conexão.
2.b ) Como abrir uma conexão
Uma forma de se estabelecer a conexão com SGDB MySQL é utilizando a função mysql_pconnect(). Esta função abre uma conexão persistente com o SGDB. Ela retorna um link (uma ligação) caso a conexão tenha sido estabelecida ou retorna false caso a conexão não pôde ser estabelecida. Existem várias assinaturas para esta função, no entanto uma bem comum é aquela onde são passados o host, o usuário e o password. A assinatura descrita segue abaixo: $conexao = mysql_pconect(‘host’, ‘usuario’, ‘senha’) Onde $conexao é a variável que conterá o link caso a conexão tenha sido estabelecida, host é o local onde o SGBD está instalado e provendo o serviço. Usuário e senha são, respectivamente, o usuário e sua senha no SGDB.
2.c ) Como selecionar o banco de dados
Uma vez criado o link com o SGDB deve-se indicar qual o banco de dados que será trabalhado. Para tal faz-se uso da função mysql_select_db(). Ela retorna true ou false dependendo se ela conseguiu ou não ativar o banco de dados indicado. Uma assinatura possível é aquela onde são passados o banco e o link. A assinatura descrita segue abaixo: $conseguiu = mysql_select_db(‘nome_banco’, $conexao)
2.d ) Como executar uma SQL
Para executar uma SQL no SGDB MySQL utiliza-se a função mysql_query(). Esta função retorna um ResultSet contendo os resultados da consulta caso a query seja um SELECT ou então ela retorna true ou false se a query for INSERT, DELETE ou UPDATE. Uma assinatura possível é aquela onde são passados a query e o link. A assinatura descrita segue abaixo:
$resultado = mysql_query($sql, $conexao) Onde $sql é uma variável que contém uma string com a operação desejada.
2.e ) Como manipular o ResultSet da execução anterior
A função mysql_query() retorna, como mencionado, um ResultSet. Talvez uma das maneiras mais simples de se manipular esse ResultSet é transformando-o em uma matriz MxN onde M é o número de linhas contidas no resultado da consulta e N o número de colunas contidas no resultado da consulta. Para obter tal resultado faremos uso da função mysql_fetch_row(). Esta função retorna um array 1xN contendo os valores de uma tupla e posiciona o ponteiro do resultSet na próxima tupla. O parâmetro dessa função é uma variável contendo o resultSet. Segue abaixo um exemplo dessa transformação de um resultSet em uma matriz: $resultSet = mysql_query(“SELECT nome, rg FROM tabela_pessoa”, $conexao) $l = 0; while($linha = mysql_fetch_row($resultSet)){ // para passar por todas as linhas $resultado[$l] = $linha; $l++; } Depois dessa execução, a variável resultado será uma matriz de Mx2, onde M é o número de tuplas da tabela_pessoa. Cada posição $l,$c corresponde à linha de índice $l (começando de zero) e à coluna de índice $c do resultSet (começando de zero). Por exemplo, $resultado[0][0] conterá a string “Fulano da Silva” e $resultado[0][1] a string “R01”.
2.f ) Como fechar a conexão
Para fechar a conexão aberta no item 2.b é utilizada a função mysql_close(). Ela retorna true ou false dependendo se ela conseguiu ou não fechar a conexão. Como parâmetro, geralmente é passado o link aberto no item 2.b. A sintaxe é a seguinte: $conseguiu = mysql_close($conexao)
3. Referência utilizada
Parte dessa apostila foi confeccionada com base nas anotações de aula da disciplina Banco de Dados I do professor Dr. Joaquim César Felipe.