LabMM4 (T16 - 12/13) - PHP + MySQL

17
PHP + MySQL: Introdução Carlos Santos LabMM 4 - NTC - DeCA - UA Aula 16, 30-04-2013

description

 

Transcript of LabMM4 (T16 - 12/13) - PHP + MySQL

Page 1: LabMM4 (T16 - 12/13) - PHP + MySQL

PHP + MySQL: Introdução

Carlos SantosLabMM 4 - NTC - DeCA - UAAula 16, 30-04-2013

Page 2: LabMM4 (T16 - 12/13) - PHP + MySQL

objetivos do módulo

Criar sítios Web dinâmicos com informação armazenada em bases de dados

• parte 1: visualização e navegação de informação armazenada em BD• visualizar dados de uma tabela• visualizar dados de várias tabelas ligadas entre si• visualizar detalhes de informação específica

• parte 2: gestão da informação em BD• inserir novos dados• atualizar dados• apagar dados

• parte 3: outras tecnologias interessantes para projetos finais• Encriptação, SVN, MVC, Ajax, APIs, JSON,...

Page 3: LabMM4 (T16 - 12/13) - PHP + MySQL

novidade do ano letivo anterior...

... sem rede de segurança :)

Page 4: LabMM4 (T16 - 12/13) - PHP + MySQL

etapas

1. estabelecer ligação com o MySQL

2. escolher a BD

3. extrair dados da BD através de uma query -> recordset

4. preparar dados para trabalhar no PHP -> fetch

5. mostrar dados

6. fechar ligação ao MySQL

Page 5: LabMM4 (T16 - 12/13) - PHP + MySQL

1. estabelecer ligação ao MySQL

mysql_connect()

• abre uma ligação não persistente ao servidor• existe apenas no âmbito da página/script que a usa• deve ser terminada pela função mysql_close()

mysql_pconnect()

• abre uma ligação persistente ao servidordepois de aberta, esta será mantida para todas as páginasgestão destas ligações persistentes é feita através da configuração de parâmetros no próprio servidor MySQL• wait_timeout• max_connect_errors

Page 6: LabMM4 (T16 - 12/13) - PHP + MySQL

1. estabelecer ligação ao MySQL

$connection = mysql_connect(hostname, username, password);

Boas práticas

• criar uma pasta “connections”• criar um ficheiro “connection.php” com:<?php$hostname = “localhost";$username = “nome_utilizador";$password = “password_utilizador";

$connection = mysql_connect($hostname, $username, $password);

?>

• incluir o ficheiro em todas as páginas que precisem de interagir com a BDrequire_once('connections/connection.php');

Page 7: LabMM4 (T16 - 12/13) - PHP + MySQL

1. estabelecer ligação ao MySQL

E se a ligação der erro?

$connection = mysql_connect(hostname, username, password)or trigger_error(mysql_error(), E_USER_ERROR);

• trigger_error() - dispara uma configuração de erro cujo comportamento pode ser controlado com set_error_handler()

• mysql_error() - texto do último erro gerado pela última função do MySQL• E_USER_ERROR - “User-generated error message”

$connection = mysql_connect(hostname, username, password)|| die(‘Erro na ligação à base de dados’);

• este método só deve ser utilizado para debug em desenvolvimento porque não permite um controlo dos erros enviados para o utilizador!

Page 8: LabMM4 (T16 - 12/13) - PHP + MySQL

2. escolher a BD

mysql_select_db(dbname);

Incluir em “connection.php”

<?php$hostname = “localhost";$username = “nome_utilizador";$password = “password_utilizador";$dbname = “nome_basededados”;

$connection = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(), E_USER_ERROR);

mysql_select_db($dbname);

?>

Page 9: LabMM4 (T16 - 12/13) - PHP + MySQL

3. extrair dados da BD a partir de uma query

$query = "SELECT colunas FROM tabela";$rsName = mysql_query($query , $connection);

• $query só pode conter uma query e sem “;” no final. Não há suporte para múltiplos queries numa única chamada!

• $rsName é uma variável do tipo “resource” que contem todos os valores resultantes da execução do query na respectiva base de dados

• retorna FALSE se existiu um erro na execução do query

Para saber o número total de registos do resultado

• $totalrows_rsName = mysql_num_rows($rsName);

Para libertar espaço de memória ocupado (pouco utilizado)

• mysql_free_result($rsName);

Page 10: LabMM4 (T16 - 12/13) - PHP + MySQL

Um recordset é uma estrutura de dados sem índices

• o acesso é realizado ao elemento apontado pelo ponteiro• os métodos de fetch fazem avançar o ponteiro para a próxima “linha”

3. recordset

Page 11: LabMM4 (T16 - 12/13) - PHP + MySQL

4. preparar dados para trabalhar no PHP -> fetch

Para utilizar a informação do recordset é necessário preparar (ir buscar) os dados através de um processo designado por fetch

O fetch dos resultados é realizado linha a linha!

Vários métodos disponíveis dependendo do modo como se prefere tratar os dados nos passos seguintes:

• mysql_fetch_assoc(recorset) - “Fetch a result row as an associative array”

• mysql_fetch_row(recordset) - “Get a result row as an enumerated array”• mysql_fetch_array(recordset) - “Fetch a result row as an associative

array, a numeric array, or both”

Page 12: LabMM4 (T16 - 12/13) - PHP + MySQL

4. preparar dados para trabalhar no PHP -> fetch

$row_rsName = mysql_fetch_assoc($rsName);echo $row_rsName[“chave1"];echo $row_rsName[“chaveN"];

• $row_rsName é um array associativo• o acesso aos valores é realizado através das chaves do array• as chaves são iguais aos nomes dos campos retornados pela query• retorna FALSE se já não existirem dados para fetch

Para listar todos os resultados

while ($row_rsName = mysql_fetch_assoc($rsName)){ echo $row_rsName[“campo1"]; echo $row_rsName[“campoN"];}

Page 13: LabMM4 (T16 - 12/13) - PHP + MySQL

4. preparar dados para trabalhar no PHP -> fetch

$row_rsName = mysql_fetch_row($rsName);echo $row_rsName[0];echo $row_rsName[N];

• $row_rsName é um array enumerado• o acesso aos valores é realizado através dos índices• retorna FALSE se já não existirem dados para fetch

Para listar todos os resultados

while ($row_rsName = mysql_fetch_row($rsName)){ echo $row_rsName[0]; echo $row_rsName[N];}

Page 14: LabMM4 (T16 - 12/13) - PHP + MySQL

5. mostrar dados

Já foi exemplificados nos slides do ponto 4 :)

É necessário aplicar os conhecimentos adquiridos no módulo anterior. Trata-se de utilizar o PHP para tratar os dados dos arrays e mostrar a informação na página.

Page 15: LabMM4 (T16 - 12/13) - PHP + MySQL

6. fechar ligação ao MySQL

mysql_close($connection);

Boas práticas

• o PHP fecha a ligação automaticamente quando o script é terminado• no entanto, é considerada uma boa prática incluir o método para fechar a

ligação• a não utilização deste método é crítica quando existem scripts muito

pesados, com longos tempos de processamento, que deixam as ligações “penduradas” durante muito tempo

• um servidor de MySQL tem recursos limitados e não aguenta um número infinito de ligações em simultâneo!

Page 16: LabMM4 (T16 - 12/13) - PHP + MySQL

No final...

// Ficheiro “connections/connection.php”<?php // Define variáveis $hostname = “localhost"; $username = “nome_utilizador"; $password = “password_utilizador"; $dbname = “nome_basededados”;

// Estabelece ligação ao MySQL $connection = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(), E_USER_ERROR);

// Estabelece ligação à BD mysql_select_db($dbname);

mysql_set_charset(‘utf8’, $connection);?>

Page 17: LabMM4 (T16 - 12/13) - PHP + MySQL

No final...

<?php // Ligação à BD require_once('connections/connection.php'); // Extrair dados da BD $query = "SELECT colunas FROM tabela"; $rsName = mysql_query($query , $connection);

// Mostrar dados while ($row_rsName = mysql_fetch_assoc($rsName)){ echo $row_rsName[“campo1"]; echo $row_rsName[“campoN"]; }

// Fechar ligação à BD mysql_close($connection);?>