PHP + MySQL: Introdução
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula PHP+MySQL 01, 02-05-2012
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
     • SVN, MVC, Ajax, APIs, JSON,...
novidade para este ano letivo...

... sem rede de segurança :)
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
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 servidor
    depois de aberta, esta será mantida para todas as páginas
    gestão destas ligações persistentes é feita através da configuração de
    parâmetros no próprio servidor MySQL
     • wait_timeout
     • max_connect_errors
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 BD
    require_once('connections/connection.php');
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!
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);
    ?>
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);
3. recordset

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”
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”
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[“chave1"];
   echo $row_rsName[“chaveN"];
}
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_assoc($rsName)){
   echo $row_rsName[0];
   echo $row_rsName[N];
}
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.
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!
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);
?>
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[“chave1"];
       echo $row_rsName[“chaveN"];
     }

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

Aula 01 PHP+MySQL - LabMM4

  • 1.
    PHP + MySQL:Introdução Carlos Santos LabMM 4 - NTC - DeCA - UA Aula PHP+MySQL 01, 02-05-2012
  • 2.
    objetivos do módulo Criarsí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 • SVN, MVC, Ajax, APIs, JSON,...
  • 3.
    novidade para esteano letivo... ... sem rede de segurança :)
  • 4.
    etapas 1. estabelecer ligaçãocom 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
  • 5.
    1. estabelecer ligaçãoao 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 servidor depois de aberta, esta será mantida para todas as páginas gestão destas ligações persistentes é feita através da configuração de parâmetros no próprio servidor MySQL • wait_timeout • max_connect_errors
  • 6.
    1. estabelecer ligaçãoao 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 BD require_once('connections/connection.php');
  • 7.
    1. estabelecer ligaçãoao 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!
  • 8.
    2. escolher aBD 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); ?>
  • 9.
    3. extrair dadosda 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);
  • 10.
    3. recordset 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”
  • 11.
    4. preparar dadospara 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”
  • 12.
    4. preparar dadospara 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[“chave1"]; echo $row_rsName[“chaveN"]; }
  • 13.
    4. preparar dadospara 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_assoc($rsName)){ echo $row_rsName[0]; echo $row_rsName[N]; }
  • 14.
    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.
  • 15.
    6. fechar ligaçãoao 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!
  • 16.
    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); ?>
  • 17.
    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[“chave1"]; echo $row_rsName[“chaveN"]; } // Fechar ligação à BD mysql_close($connection); ?>