Introdução a Conexão à Banco de Dados: PHP + MYSQL

Acessando Bancos de Dados

Neste documento todos os exemplos referentes ao acesso ao banco de dados utilizarão o SGBD MySQL, que pode ser copiado gratuitamente no site http://www.mysql.org. Aliás você provavelmente deve saber que o MySQL é um excelente SGBD, largamente utilizado em aplicações web e, além de gratuito, um software de código aberto. Saiba mais em http://www.jack.eti.br/www/?p=38

Para interagir com uma base de dados SQL existem três funções básicas que devem ser utilizadas: uma que faz a conexão com o servidor de banco de dados, uma que seleciona a base de dados a ser utilizada e uma terceira que executa uma “query” (instrução qualquer) SQL.

Conexão com o servidor

A conexão com o servidor de banco de dados MySQL em PHP é feita através da função mysql_connect, que tem a seguinte sintaxe:

int mysql_connect(string /*host [:porta]*/ , string /*login*/ , string /*senha*/ );

Os parâmetros são bastante simples: o endereço do servidor(host), o nome do usuário (login) e a senha para a conexão. A função retorna um valor inteiro, que é o identificador da conexão estabelecida e deverá ser armazenado numa variável para ser utilizado depois. No nosso exemplo, temos como servidor de banco de dados a mesma máquina local que roda o servidor http, como login o usuário “root” e senha “phppwd”:

$conexao = mysql_connect(“localhost”, “root”, “phppwd”);

Assim, se a conexão for bem sucedida (existir um servidor no endereço especificado que possua o usuário com a senha fornecida), o identificador da conexão fica armazenado na variável $conexão.

Seleção do banco de dados

Uma vez conectado, é preciso selecionar o banco de dados existente no servidor com o qual desejamos trabalhar. Isso é feito através da função mysql_select_db, que possui a seguinte sintaxe:

int mysql_select_db(string /*nome_base*/, int /*conexao*/ );

O valor de retorno é 0 se o comando falhar, e 1 em caso de sucesso. O nome da base de dados a selecionar é o primeiro parâmetro fornecido, seguido pelo identificador da conexão. Se este for omitido, o interpretador PHP tentará utilizar a última conexão estabelecida. Recomenda-se sempre explicitar esse valor, para facilitar a legibilidade e eficácia do código. No nosso exemplo, a base de dados a ser selecionada possui o nome “ged”:

mysql_select_db(“ged”, $conexao);

Após a execução desse comando qualquer consulta executada para aquela conexão utilizará a base de dados selecionada.

Execução de queries SQL

Após estabelecida a conexão e selecionada a base de dados a ser utilizada, quase toda a interação com o servidor MySQL pode ser feita através de consultas (lê-se consulta toda instrução SQL: Inserção, exclusão, pesquisa, etc…) escritas em SQL (Structured Query Language), com a função mysql_query, que utiliza a seguinte sintaxe:

int mysql_query(string consulta, int [conexao] );

O valor de retorno é 0 se falhar ou 1 em caso de sucesso. Sucesso aqui significa que a consulta está sintaticamente correta e foi executada no servidor. Nenhuma informação sobre o resultado é retornada deste comando, ou mesmo se o resultado foi o esperado. No caso da consulta ser um comando SELECT, o valor de retorno é um valor interno que identifica o resultado, que poderá ser tratado com a função mysql_result() e outras.

PS: A string query não deve conter ponto-e-vírgula no final do comando, e o identificador da conexão é opcional.

Vamos criar uma tabela como exemplo:

$cria = “CREATE TABLE exemplo (codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50))”;

mysql_query($cria, $conexao);

Testando tudo até aqui

Agora vejamos como ficou o código completo para executar uma query SQL numa base de dados MySQL, com um exemplo que cria uma tabela chamada exemplo e adiciona alguns dados:

$conexao = mysql_connect(“localhost”, “root”, “phppwd”);
mysql_select_db(“ged”, $conexao);

$cria = “CREATE TABLE exemplo (codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50))”;

$insere1 = “INSERT INTO exemplo (nome,email) VALUES (“Mauricio Vivas”,”vivas@usa.net”);

$insere2 = “INSERT INTO exemplo (nome,email) VALUES (“Jose da Silva”,”jose@teste.com”);

$insere3 = “INSERT INTO exemplo (nome,email) VALUES (“Fernando Henrique Cardoso”,”fhc@planalto.gov.br”);

$insere4 = “INSERT INTO exemplo (nome,email) VALUES (“Bill Clinton”,”president@whitehouse.gov”);

mysql_query($cria, $conexao);
mysql_query($insere1, $conexao);
mysql_query($insere2, $conexao);
mysql_query($insere3, $conexao);
mysql_query($insere4, $conexao);

Tratamento de resultados de query SELECT

Ao executar uma query SQL SELECT através do comando mysql_query, o identificador do resultado deve ser armazenado numa variável que pode ser tratada de diversas formas. Duas maneiras interessantes de fazê-lo usam as funções mysql_result e mysql_fetch_row, respectivamente.

A função mysql_result tem a seguinte sintaxe:

int mysql_result(int resultado, int linha, mixed [campo]);

Onde o parâmetro “resultado” é o identificador do resultado, obtido com o retorno da função mysql_query, e o parâmetro “linha” especifica a tupla (registro) a ser exibida, já que uma query SELECT pode retornar diversas tuplas, e campo é o identificador do campo a ser exibido, sendo o tipo descrito como mixed pela possibilidade de ser de diversos tipos (neste caso, inteiro ou string).

Vejamos um exemplo utilizando a tabela criada anteriormente:

$consulta = “SELECT nome, email FROM exemplo WHERE email LIKE ‘vivas’”;

$resultado = mysql_query($consulta, $conexao);

printf(“Nome: “, mysql_result($resultado,0,”nome”), “
\n”);
printf(“e-mail: “, mysql_result($resultado,0,”email”),“
”);

Com o exemplo acima, o resultado será:

Nome: Mauricio Vivas

e-mail: vivas@usa.net

PS: É importante notar que a utilização desta função é um pouco trabalhosa, já que no caso de um resultado com várias linhas é preciso controlar o número de linhas para tratá-las (pode-se utilizar a função mysql_num_rows(int resultado), que retorna o número de linhas de um resultado), e no caso de uma alteração no nome do campo é preciso alterar também a maneira de tratá-lo. Por isso é mais aconselhável que se use uma outra função, como por exemplo mysql_fetch_row.

A função mysql_fetch_row possuí a seguinte sintaxe:

array mysql_fetch_row(int result);

A variável “result” é o identificador da memória de resultados, obtido como retorno da função mysql_query. O resultado produzido por esta função é de retirar a primeira linha da memória de resultados, se houver, e colocá-la num array. Assim torna-se mais fácil tratar um resultado com várias linhas, e sem utilizar os nomes dos campos na rotina de tratamento do resultado:

O código acima irá imprimir todos os registros da tabela exemplo numa tabela html. Se o programador desejar “pular” alguma(s) linha(s) do resultado, poderá utilizar a função mysql_data_seek, que tem por objetivo definir qual será a próxima linha da memória de resultados a ser impressa. Sua sintaxe é:

int mysql_data_seek(int resultado, int linha);

Sendo “resultado” o identificador do resultado e o parâmetro “linha” o número da linha. Retorna 0 em caso de falha, e um valor diferente de zero em caso de sucesso.

Existem diversas outras funções para o tratamento de resultados, que armazenam as linhas em arrays e objetos, assim como outras funções para administrar o banco de dados, mas como este texto tem um enfoque introdutório ao assunto, inicialmente não tratará tópicos mais avançados.

Este artigo foi baseado no trabalho de Maurício Vivas de Souza Barreto, aluno da Universidade Federal de Sergipe, sob orientação do Profº Giovanny Lucero. Todos os direitos reservados!