|
Neste documento todos os exemplos referentes
a acesso de base de dados utilizarão
o gerenciador de base de dados MySQL, que
pode ser copiado gratuitamente no site http://www.mysql.org.
Para interagir com uma base de dados SQL
existem três comandos básicos
que devem ser utilizados: um que faz a ligação
com o servidor de base de dados, um que
seleciona a base de dados a ser utilizada
e um terceiro que executa uma "query"
SQL.
Ligação com o servidor
A ligação com o servidor
de base de dados mySQL em PHP é feita
através do comando 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 utilizador (login) e a senha de
ligação. A função
retorna um valor inteiro, que é o
identificador da ligação estabelecida
e deverá ser armazenado numa variável
para ser utilizado depois. No nosso exemplo,
temos como servidor de base de dados a mesma
máquina que corre o servidor http,
como login o utilizador "root"
e senha "phppwd":
$ligacao = mysql_connect("localhost",
"root", "phppwd");
Assim, se a ligação for bem
sucedida (existir um servidor no endereço
especificado que possua o utilizador com
a senha fornecida), o identificador da ligação
fica armazenado na variável $ligação.
Seleção do base de dados
Uma vez ligado, é preciso selecionar
o base de dados existente no servidor com
o qual desejamos trabalhar. Isso é
feito através da função
int mysql_select_db,
que possui a seguinte sintaxe:
int mysql_select_db(string
/*nome_base*/, int /*ligacao*/ );
O valor de retorno é 0 se o comando
falhar, e 1 no caso de sucesso. O nome da
base de dados a selecionar é o primeiro
parâmetro fornecido, seguido pelo
identificador da ligação.
Se este for omitido, o interpretador PHP
tentará utilizar a última
ligação estabelecida, é
recomendável inserir sempre este
valor, para facilitar a legibilidade do
código. No nosso exemplo, a base
de dados a ser selecionada possui o nome
"ged":
mysql_select_db("ged",
$ligacao);
Após a execução deste
comando qualquer consulta executada para
aquela ligação utilizará
a base de dados selecionada.
Execução de queries SQL
Após estabelecida a ligação
e selecionada a base de dados a ser utilizada,
quase toda a interacção com
o servidor mySQL pode ser feita através
de consultas escritas em SQL (Structured
Query Language), com o comando mysql_query,
que utiliza a seguinte sintaxe:
int mysql_query(string
consulta, int [ligacao] );
O valor de retorno é 0 se falhar
ou 1 em caso de sucesso. Sucesso aqui significa
que a consulta está sintaticamente
correcta e foi executada no servidor. Nenhuma
informação sobre o resultado
é devolvido deste comando, ou até
mesmo se o resultado é 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. A string query não deve
conter ponto-e-vírgula no final do
comando, e o identificador da ligaçã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,
$ligacao);
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:
$ligacao = mysql_connect("localhost",
"root", "phppwd");
mysql_select_db("ged", $ligacao);
$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,
$ligacao);
mysql_query($insere1, $ligacao);
mysql_query($insere2, $ligacao);
mysql_query($insere3, $ligacao);
mysql_query($insere4, $ligacao);
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 o fazer usam o comando mysql_result
e o comando mysql_fetch_row,
respectivamente.
O comando mysql_result
tem a seguinte sintaxe:
int mysql_result(int
resultado, int linha, mixed [campo]);
Onde resultado é o identificador
do resultado, obtido com o retorno da função
mysql_query,
linha especifica o registo a ser exibido,
já que uma query SELECT pode retornar
diversos registos, 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,
$ligacao);
printf("Nome:
", mysql_result($resultado,0,"nome"),
"<br>\n");
printf("e-mail: ", mysql_result($resultado,0,"email"),"<br>");
Com o exemplo acima, o resultado será:
Nome: Mauricio Vivas<br>
e-mail: vivas@usa.net<br>
É 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,
que possui a seguinte sintaxe:
array mysql_fetch_row(int
result);
A variável resultado é 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:
$consulta = "SELECT
nome, email FROM exemplo";
$resultado = mysql_query($consulta,
$ligacao);
echo "<table
border=1>\n";
echo "<tr><td>Nome</td><td>e-mail</tr>\n";
while ($linha = mysql_fetch_row($resultado))
{
printf("<tr><td>$linha[0]</td>");
printf("<td>$linha[1]</td></tr>");
}
echo "</table>\n";
O código acima irá imprimir
todos os registos da tabela exemplo numa
tabela html. Se o programador desejar "saltar"
alguma(s) linha(s) do resultado, poderá
utilizar a função mysql_data_seek,
que tem por objectivo definir qual será
a próxima linha da memória
de resultados a ser impressa. A sua sintaxe
é:
int mysql_data_seek(int
resultado, int linha);
Sendo resultado o identificador do resultado
e linha o numero 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 objectos, assim como
outras funções para administrar
o base de dados, mas como este documento
trata-se de uma introdução,
inicialmente não tratará tópicos
mais avançados.
|