Lição 20: Extraindo dados de um Banco de Dados

Chegou a hora de extrairmos dados de um Extraindo dados de um Banco de Dados.

Esta é, sem duvida, uma das mais importantes lições deste tutorial. Uma vez que você tenha entendido esta lição você saberá por que um site baseado em Banco de Dados pode tornar-se tão poderoso e sua visão de desenvolvedor certamente vai se expandir-se drasticamente.

Consultas SQL

Para extrair dados de um Banco de Dados usamos queries (consultas) SQL. Um exemplo de query é: "extraia todos os dados da tabela 'people' ordenados alfabeticamente" ou "extraia os nomes contidos na tabela 'people'".

Repetimos: Structured Query Language (SQL) é usada para estabelecer comunicação com o Banco de Dados. Observe o exemplo a seguir:


	Extrair todos os dados da tabela 'people'
	
	

O comando SQL é assim:


	SELECT * FROM people
	
	

A sintaxe é auto explicativa. Leia e conclua sobre os comandos mostrados a seguir.

Exemplo 1: Extrair dados de uma tabela

Este exemplo usa o Banco de Dados e Tabela mostrados na lições 19 e na lição 18. Portanto, leia aquelas lições antes de prosseguir.

O exemplo mostra como extrair dadis da tabela "people" com uso de consulta SQL.

SQL query retorna o resultado em forma de uma série de registros. Estes registros são armazenados em um conjunto de registros denominado recordset. Um recordset pode ser definido como uma esécie de tabela na memória do servidor contendo linhas de dados (registros) no qual cada registro é subdividido em campos individuais (ou colunas).

Um recordset pode ser comparado a uma tabela na qual cada registro pode ser comparado a uma linha de tabela. Usando PHP podemos percorrer um recordset com um loop usando a função documentaçãomysql_fetch_array que retorna um array de linhas.

O código a seguir mostra o uso de documentaçãomysql_fetch_array para construir um loop pelo recordset:


	<html>
	<head>
	<title>Extraindo dados de um  Banco de Dados</title>
	</head>
	<body>

	<?php
	// Conexão com o Banco de Dados
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Seleciona o Banco de Dados
	mysql_select_db("mydatabase") or die(mysql_error());

	//query SQL
	$strSQL = "SELECT * FROM people";

	// Executa a query (o recordset $rs contém o resultado da query)
	$rs = mysql_query($strSQL);
	
	// Loop pelo recordset $rs
	// Cada linha vai para um array ($row) usando mysql_fetch_array
	while($row = mysql_fetch_array($rs)) {

	   // Escreve o valor da coluna FirstName (que está no array $row)
	  echo $row['FirstName'] . "<br />";

	  }

	// Encerra a conexão
	mysql_close();
	?>
	</body>
	</html>
	
	

Notar que para cada registro extraimos o conteúdo da coluna "FirstName" com $row['FirstName']. De modo semelhante podemos extrair o conteúdo da coluna "Phone" bcom $row['Phone'], por exemplo.

A ordem de saída dos recordset é a mesma que ele ocupa na tabela do Banco de Dados. No exemplo a seguir veremos como controlar a ordem de saída dos recordset.

Exemplo 2: Ordem de saída alfabética, cronológica ou númerica

Não raro é interessante colocar a saída dos registros em uma ordem alfabética, cronológica ou númerica. Isto é fácil de se fazer com SQL no qual a sintaxe Order By ColumnName é usada para realizar o ordenamento.

Observe o comandos SQL do exemplo anterior:


	strSQL = "SELECT * FROM people"
	
	

Os registros podem, por exemplo, serem ordenados em ordem alfabética pelo primeiro nome das pessoas, como mostrado a seguir:


	strSQL = "SELECT * FROM people ORDER BY FirstName"
	
	

Ou cronologicamente pela data de aniversário:


	strSQL = "SELECT * FROM people ORDER BY BirthDate"
	
	

A ordenação pode ser alterada de ascending (ordem ascendente) para descending (ordem descendente) com uso de DESC:


	strSQL = "SELECT * FROM people ORDER BY BirthDate DESC"
	
	

No exemplo a seguir as pessoas são ordenadas por idade:

	<html>
	<head>

	<title>Extraindo dados de um Banco de Dados</title>

	</head>
	<body>
	
	<?php
	// Conecta com o Banco de Dados
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Seleciona o Banco de Dados
	mysql_select_db("mydatabase") or die(mysql_error());

	// query SQL
	$strSQL = "SELECT * FROM people ORDER BY BirthDate DESC";

	// Executa a query (o recordset $rs contém o resultado da query)
	$rs = mysql_query($strSQL);
	
	// Loop pelo recordset $rs
	while($row = mysql_fetch_array($rs)) {

	   // Escreve o valor da coluna FirstName e BirthDate
	  echo $row['FirstName'] . " " . $row['BirthDate'] . "<br />";

	  }

	// Encerra a conexão
	mysql_close();
	?>

	</body>
	</html>
	
	

Como exercício construa a query SQL para ordenação pelo primeiro nome, último nome, número de telefone.

Extrair dados segundo uma condição

Até aqui nossas consultas SQL extraíram todas as linhas de uma tabela. Mas, é comum a necessidade de extração de certas linhas da tabela que atendam a uma determinada condição como, por exemplo, a linha contendo um determinado telefone ou nome.

Suponha que se deseje extrair informações sobre a pessoa cujo telefone é "66554433". Isto se faz conforme mostrado a seguir:


	strSQL = "SELECT * FROM people WHERE Phone = '66554433 '"
	
	

Existem seis operadores relacionais na linguagem SQL:

= Igual
< Menor que
> Maior que
<= Menos que ou igual
> = Maior que ou igual
!= Diferente

Há também, na linguagem, alguns operadores lógicos:

AND (E)
OR (OU)
NOT (NÃO)

Ver lição 6 para mais informações sobre operadores lógicos.

No exemplo a seguir usaremos condicionais para criar um catálogo de endereços.

Exemplo 3: Catálogo de endereços

Neste exemplo usaremos muitos dos conceitos que você já aprendeu neste tutorial. Construiremos uma lista de nomes de pessoas extraídos do Banco de Dados na qual cada nome é um link cujo destino é um documento com maiores informações sobre a pessoa.

Vamos precisar de dois arquivos - list.php e person.php - com o seguinte código:

Código para o arquivo list.php


	<html>
	<head>
	<title>Extraindo dados de um Banco de Dados</title>
	</head>
	<body>

	<ul>

	<?php
	// Conectar com o Banco de Dados
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Selecionar o Banco de Dados
	mysql_select_db("mydatabase") or die(mysql_error());

	// query SQL 
	$strSQL = "SELECT * FROM people ORDER BY FirstName DESC";

	// Executar a query (o recordset $rs contém o resultado da query)
	$rs = mysql_query($strSQL);
	
	// Loop pelo recordset $rs
	while($row = mysql_fetch_array($rs)) {

	   // Nome da pessoa
	  $strName = $row['FirstName'] . " " . $row['LastName'];

	   // Cria link para o arquivo person.php com um valor de id no URL
	   $strLink = "<a href = 'person.php?id = " . $row['id'] . "'>" . $strNavn . "</a>";

	    // Lista de links
	   echo "<li>" . $strLink . "</li>";

	  }

	// Encerra conexão
	mysql_close();
	?>

	</ul>
	</body>
	</html>

	
	

Código para o arquivo person.php

	<html>
	<head>
	<title>Extraindo dados de um Banco de Dados</title>
	</head>
	<body>

	<dl>

	<?php
	// Conectar com o Banco de Dados
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Selecionar o Banco de Dados
	mysql_select_db("mydatabase") or die(mysql_error());

	// Extrair dados de acordo com o id passado no URL
	$strSQL = "SELECT * FROM people WHERE id=" . $_GET["id"];
	$rs = mysql_query($strSQL);
	
	// Loop pelo recordset $rs
	while($row = mysql_fetch_array($rs)) {

		// Escreve dados da pessoa
		echo "<dt>Nome:</dt><dd>" . $row["FirstName"] . " " . $row["LastName"] . "</dd>";
		echo "<dt>Telefone:</dt><dd>" . $row["Phone"] . "</dd>";
		echo "<dt>Data de nascimento:</dt><dd>" . $row["BirthDate"] . "</dd>";

	}

	// Encerra conexão
	mysql_close();
	?>

	</dl>
	<p><a href="list.php">Voltar à lista de nomes</a></p>

	</body>

	</html>
	
	

O catálogo de endereços é bem simples, mas bem demonstra o potencial de desenvolvimento com PHP e Banco de Dados.

Imagine um Banco de Dados com 10.000 produtos e respectivas informações devidamente cadastradas. Fazendo algumas simples adaptações nos arquivos do exemplo mostrado você poderá montar, com facilidade, um catálogo de produtos com mais de 10.000 páginas usando apenas um Banco de Dados e dois arquivos PHP.

Bem-vindo ao maravilhoso mundo dos sites extensíveis, fáceis de construir e manutenir! Depois que você aprende a trabalhar com Banco de Dados suas soluções web nunca mais serão as mesmas.



<< Lição 19: Inserindo dados em um Banco de Dados

Lição 21: Apagando dados de um Banco de Dados >>