Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

782 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

  1. 1. PHP + MySQL: IntroduçãoCarlos SantosLabMM 4 - NTC - DeCA - UAAula 16, 30-04-2013
  2. 2. objetivos do móduloCriar sítios Web dinâmicos com informação armazenada em bases dedados• 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,...
  3. 3. novidade do ano letivo anterior...... sem rede de segurança :)
  4. 4. etapas1. estabelecer ligação com o MySQL2. escolher a BD3. extrair dados da BD através de uma query -> recordset4. preparar dados para trabalhar no PHP -> fetch5. mostrar dados6. fechar ligação ao MySQL
  5. 5. 1. estabelecer ligação ao MySQLmysql_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 deparâmetros no próprio servidor MySQL• wait_timeout• max_connect_errors
  6. 6. 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);
  7. 7. 1. estabelecer ligação ao MySQLE 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 comportamentopode 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 porquenão permite um controlo dos erros enviados para o utilizador!
  8. 8. 2. escolher a BDmysql_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. 9. 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 paramúltiplos queries numa única chamada!• $rsName é uma variável do tipo “resource” que contem todos os valoresresultantes da execução do query na respectiva base de dados• retorna FALSE se existiu um erro na execução do queryPara 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. 10. 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
  11. 11. 4. preparar dados para trabalhar no PHP -> fetchPara utilizar a informação do recordset é necessário preparar (ir buscar)os dados através de um processo designado por fetchO fetch dos resultados é realizado linha a linha!Vários métodos disponíveis dependendo do modo como se prefere trataros dados nos passos seguintes:• mysql_fetch_assoc(recorset) - “Fetch a result row as an associativearray”• mysql_fetch_row(recordset) - “Get a result row as an enumerated array”• mysql_fetch_array(recordset) - “Fetch a result row as an associativearray, a numeric array, or both”
  12. 12. 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 fetchPara listar todos os resultadoswhile ($row_rsName = mysql_fetch_assoc($rsName)){echo $row_rsName[“campo1"];echo $row_rsName[“campoN"];}
  13. 13. 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 fetchPara listar todos os resultadoswhile ($row_rsName = mysql_fetch_row($rsName)){echo $row_rsName[0];echo $row_rsName[N];}
  14. 14. 5. mostrar dadosJá 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 ainformação na página.
  15. 15. 6. fechar ligação ao MySQLmysql_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 aligação• a não utilização deste método é crítica quando existem scripts muitopesados, 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úmeroinfinito de ligações em simultâneo!
  16. 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 à BDmysql_select_db($dbname);mysql_set_charset(‘utf8’, $connection);?>
  17. 17. No final...<?php// Ligação à BDrequire_once(connections/connection.php);// Extrair dados da BD$query = "SELECT colunas FROM tabela";$rsName = mysql_query($query , $connection);// Mostrar dadoswhile ($row_rsName = mysql_fetch_assoc($rsName)){echo $row_rsName[“campo1"];echo $row_rsName[“campoN"];}// Fechar ligação à BDmysql_close($connection);?>

×