Php 04 Mysql

3,412 views

Published on

Published in: Technology

Php 04 Mysql

  1. 1. Programação para WEB <ul><ul><li>Regis Pires Magalhães </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul>PHP e MySQL
  2. 2. Opções de acesso <ul><li>Há várias formas de acessar o MySQL: </li></ul><ul><ul><li>Extensão MySQL </li></ul></ul><ul><ul><ul><li>É a mais usada atualmente. </li></ul></ul></ul><ul><ul><ul><li>Excelente performance. </li></ul></ul></ul><ul><ul><ul><li>Suporta conexões persistentes . </li></ul></ul></ul><ul><ul><ul><li>Não suporta prepared statements . </li></ul></ul></ul><ul><ul><li>Extensão MySQLi (Improved / Melhorada) </li></ul></ul><ul><ul><ul><li>Possui funcionalidades extra como prepared statements, conjunto de caracteres, codificação e transações . </li></ul></ul></ul><ul><ul><ul><li>Não suporta conexões persistentes . É possível que sejam habilitadas como padrão na versão 6 do PHP. </li></ul></ul></ul>
  3. 3. Opções de acesso <ul><li>Há várias formas de acessar o MySQL: </li></ul><ul><ul><li>ADOdb </li></ul></ul><ul><ul><ul><li>Biblioteca bastante completa que padroniza o acesso a vários bancos de dados. </li></ul></ul></ul><ul><ul><ul><li>Acesso semelhante ao ADO da Microsoft, mas roda em outros sistemas operacionais além do Windows. </li></ul></ul></ul><ul><ul><li>PEAR </li></ul></ul><ul><ul><ul><li>PHP Extension and Application Repository </li></ul></ul></ul><ul><ul><ul><li>Extensa biblioteca com muitas finalidades, inclusive acesso padronizado a diferentes bancos de dados. </li></ul></ul></ul><ul><ul><li>PDO – PHP Data Objects </li></ul></ul><ul><ul><ul><li>Interface que padroniza o acesso a bancos de dados. </li></ul></ul></ul><ul><ul><ul><li>Embutido no PHP a partir da versão 5.1 </li></ul></ul></ul>
  4. 4. Conexão com o MySQL <ul><li>mysql_connect </li></ul><ul><ul><li>Abre uma conexão com um servidor MySQL. </li></ul></ul><ul><li>mysql_close </li></ul><ul><ul><li>Fecha uma conexão com um servidor MySQL. </li></ul></ul><ul><ul><li>Normalmente não é necessário, já que as conexões não persistentes são automaticamente fechadas ao final da execução do script. </li></ul></ul><ul><li>mysql_error </li></ul><ul><ul><li>Retorna o texto da mensagem de erro da operação MySQL anterior. </li></ul></ul>
  5. 5. Conexão com o MySQL <?php $link = mysql_connect( 'localhost' , 'root' , '' ); if (! $link ) { die ( 'Não foi possível conectar: ' . mysql_error()); } echo 'Conexão bem sucedida' ; mysql_close( $link ); ?>
  6. 6. Seleção de Base de Dados <ul><li>mysql_select_db </li></ul><ul><ul><li>Seleciona uma base de dados MySQL. </li></ul></ul><?php $con = mysql_connect( 'localhost' , 'root' , '' ); if (! $con ) { die ( 'Não foi possível conectar: ' . mysql_error()); } $base = mysql_select_db( 'prog_web' , $con ); if (! $base ) { die ( 'Erro ao usar a base: ' . mysql_error()); } else { echo ( 'Base de dados selecionada.' ); } ?>
  7. 7. Operações na Base de Dados <ul><li>mysql_query </li></ul><ul><ul><li>Executa uma consulta ou comando SQL. </li></ul></ul><ul><li>mysql_fetch_assoc </li></ul><ul><ul><li>Obtém um linha do resultado como uma matriz associativa </li></ul></ul>
  8. 8. Consulta e Exibição <? $conexao = mysql_connect( 'localhost' , 'root' , '' ) or die ( &quot;Erro ao efetuar conexão.&quot; ); mysql_select_db( &quot;prog_web&quot; ); $result = mysql_query( &quot;SELECT * FROM pessoas&quot; , $conexao ) or die ( &quot; ERRO na consulta &quot; . mysql_error()); ?> < html > < head >< title > CEFET-PHB </ title ></ head > < body > < h1 > Pessoas </ h1 > < table border = &quot;1&quot; > < tr >< th > Nome </ th >< th > Fone </ th >< th > E-Mail </ th ></ tr > <? while ( $pessoa = mysql_fetch_array( $result )) { ?> < tr > < td > <? = $pessoa [ 'nome' ] ?> </ td > < td > <? = $pessoa [ 'fone' ] ?> </ td > < td > <? = $pessoa [ 'email' ] ?> </ td > </ tr > <? } ?> </ table > </ body > </ html >
  9. 9. Criação de Base de Dados <?php $con = mysql_connect( 'localhost' , 'root' , '' ); if (! $con ) { die ( 'Não foi possível conectar: ' . mysql_error()); } $sql = 'CREATE DATABASE prog_web' ; if (mysql_query( $sql , $con )) { echo 'A base de dados foi criada' ; } else { echo 'Erro ao criar a BD: ' . mysql_error(); } ?>
  10. 10. CRUD <ul><li>Create </li></ul><ul><li>Retrieve </li></ul><ul><li>Update </li></ul><ul><li>Delete </li></ul>
  11. 11. CRUD - Arquivos <ul><li>db_conecta.php </li></ul><ul><ul><li>Conexão com a base de dados </li></ul></ul><ul><li>pessoas_lista.php </li></ul><ul><ul><li>Lista todas as pessoas </li></ul></ul><ul><li>pessoas_mostra.php </li></ul><ul><li>pessoas_exclui.php </li></ul><ul><li>pessoas_insere.php </li></ul><ul><li>pessoas_form.php </li></ul><ul><ul><li>Parte do formulário compartilhado por 'pessoas_insere.php' e 'pessoas_edita.php' </li></ul></ul><ul><li>pessoas_edita.php </li></ul>
  12. 12. CRUD - db_conecta.php <?php $conexao = mysql_connect( 'localhost' , 'root' , '' ) or die ( 'Erro ao efetuar conexão.' ); mysql_select_db( 'prog_web' ); ?>
  13. 13. CRUD - pessoas_lista.php <?php include_once ( 'db_conecta.php' ); $result = mysql_query( &quot;SELECT * FROM pessoas&quot; , $conexao ) or die ( 'ERRO na consulta: ' . mysql_error()); ?> < html > < head >< title > CEFET-PHB </ title ></ head > < body > < h1 > Pessoas - Lista </ h1 > < table border = &quot;1&quot; > < tr >< th > Nome </ th >< th > Fone </ th > < th > E-Mail </ th >< th colspan = &quot;3&quot; > Ações </ th ></ tr > <? while ( $pessoa = mysql_fetch_array( $result )) { ?> < tr > < td > <? = $pessoa [ 'nome' ] ?> </ td > < td > <? = $pessoa [ 'fone' ] ?> </ td > < td > <? = $pessoa [ 'email' ] ?> </ td > < td >< a href = &quot; pessoas_mostra.php?id= <? = $pessoa [ 'id' ] ?> &quot; > Mostra </ a ></ td > < td >< a href = &quot; pessoas_edita.php?id= <? = $pessoa [ 'id' ] ?> &quot; > Edita </ a ></ td > < td >< a href = &quot; pessoas_exclui.php?id= <? = $pessoa [ 'id' ] ?> &quot; onclick = &quot;return confirm('Tem certeza?');&quot; > Exclui </ a ></ td > </ td > </ tr > <? } ?> </ table > < p >< a href = &quot;pessoas_insere.php&quot; > Insere </ a ></ p > </ body > </ html >
  14. 14. CRUD - pessoas_mostra.php <?php include_once ( 'db_conecta.php' ); $id = $_GET [ 'id' ]; $result = mysql_query( &quot;SELECT * FROM pessoas where id=' $id '&quot; , $conexao ) or die ( 'ERRO na consulta: ' . mysql_error()); $pessoa = mysql_fetch_array( $result ); ?> < html > < head >< title > CEFET-PHB </ title ></ head > < body > < h1 > Pessoas - Mostra </ h1 > < p > Nome: <? = $pessoa [ 'nome' ] ?> </ p > < p > Telefone: <? = $pessoa [ 'fone' ] ?> </ p > < p > E-Mail: <? = $pessoa [ 'email' ] ?> </ p > < p >< a href = &quot;pessoas_lista.php&quot; > Volta </ a ></ p > </ body > </ html >
  15. 15. CRUD - pessoas_exclui.php <?php include_once ( 'db_conecta.php' ); $id = $_GET [ 'id' ]; mysql_query( &quot;DELETE FROM pessoas where id=' $id '&quot; , $conexao ) or die ( ' ERRO na exclusão: ' . mysql_error()); header( 'Location: pessoas_lista.php' ); ?>
  16. 16. CRUD - pessoas_insere.php <?php include_once ( 'db_conecta.php' ); $pessoa [ 'nome' ] = $_POST [ 'nome' ]; $pessoa [ 'fone' ] = $_POST [ 'fone' ]; $pessoa [ 'email' ] = $_POST [ 'email' ]; if (strlen(trim( $_POST [ 'nome' ])) > 0 ) { mysql_query( &quot;insert into pessoas (nome,fone,email) values (' { $pessoa [ 'nome' ]} ',' { $pessoa [ 'fone' ]} ', ' { $pessoa [ 'email' ]} ')&quot; ) or die ( 'Problema ao realizar operação: ' . mysql_error()); header( &quot;Location: pessoas_lista.php&quot; ); } ?> < html > < head >< title > CEFET-PHB </ title ></ head > < body > < h1 > Pessoas - Insere </ h1 > < form action = &quot;pessoas_insere.php&quot; method = &quot;post&quot; > <?php include_once ( 'pessoas_form.php' ); ?> < p >< input type = &quot;submit&quot; value = &quot;Insere&quot; /></ p > </ form > < p >< a href = &quot;pessoas_lista.php&quot; > Volta </ a ></ p > </ body > </ html >
  17. 17. CRUD - pessoas_form.php < p > Nome < br />< input type = &quot;text&quot; name = &quot;nome&quot; value = &quot; <? = $pessoa [ 'nome' ] ?> &quot; /></ p > < p > Telefone < br />< input type = &quot;text&quot; name = &quot;fone&quot; value = &quot; <? = $pessoa [ 'fone' ] ?> &quot; /></ p > < p > E-Mail < br />< input type = &quot;text&quot; name = &quot;email&quot; value = &quot; <? = $pessoa [ 'email' ] ?> &quot; /></ p >
  18. 18. CRUD - pessoas_edita.php <?php include_once ( 'db_conecta.php' ); $result = mysql_query( &quot;SELECT * FROM pessoas where id=' { $_GET [ 'id' ]} '&quot; , $conexao ) or die ( &quot; ERRO na consulta &quot; . mysql_error()); $pessoa = mysql_fetch_array( $result ); if (strlen(trim( $_POST [ 'nome' ])) > 0 ) { mysql_query( &quot;update pessoas set nome=' { $_POST [ 'nome' ]} ', fone=' { $_POST [ 'fone' ]} ', email=' { $_POST [ 'email' ]} ' where id=' { $_GET [ 'id' ]} '&quot; ) or die ( 'Problema ao realizar operação: ' . mysql_error()); header( &quot;Location: pessoas_lista.php&quot; ); } ?> < html > < head >< title > CEFET-PHB </ title ></ head > < body > < h1 > Pessoas - Edita </ h1 > < form action = &quot; pessoas_edita.php?id= <? = $_GET [ 'id' ] ?> &quot; method = &quot;post&quot; > <?php include_once ( 'pessoas_form.php' ); ?> < p >< input type = &quot;submit&quot; value = &quot;Atualiza&quot; /></ p > </ form > < p >< a href = &quot;pessoas_lista.php&quot; > Volta </ a ></ p > </ body > </ html >
  19. 19. PHP com MySQL DETALHES EXTRA
  20. 20. Conexão com MySQL <ul><li>Usar UNIX socket é mais eficiente que usar a camada TCP/IP. </li></ul><ul><li>Para a extensão mysql usar UNIX socket basta que esse recurso esteja disponível e que o nome do host seja localhost : </li></ul><ul><li>Também é possível definir o acesso via UNIX Socket explicitamente: </li></ul>mysql_connect( 'localhost' , 'root' , '' ); mysql_connect( 'localhost:/var/run/mysqld/mysqld.sock' , 'root' , '' );
  21. 21. Conexão com MySQL <ul><li>mysql_pconnect </li></ul><ul><ul><li>Abre uma conexão persistente com um servidor MySQL. </li></ul></ul><ul><ul><li>Ao conectar, a função tenta encontrar uma conexão que já esteja aberta. </li></ul></ul><ul><ul><li>Se uma for encontrada, será usada ao invés de abrir uma nova conexão. </li></ul></ul><ul><ul><li>A conexão não será fechada quando a execução do script terminar. </li></ul></ul><ul><ul><ul><li>Ela permanecerá aberta para uso futuro </li></ul></ul></ul><ul><ul><ul><li>mysql_close() não irá fechar conexões estabelecidas por mysql_pconnect(). </li></ul></ul></ul>
  22. 22. Obtendo informações <?php $link = mysql_pconnect( 'localhost' , 'root' , '' ); if (! $link ) { die ( 'Falha na conexão: ' . mysql_error()); } echo ( 'Servidor: ' . mysql_get_host_info() . '<br/>' ); echo ( 'Cliente : ' . mysql_get_client_info() . '<br/>' ); ?>
  23. 23. Prepared Statements <ul><li>Vantagens: </li></ul><ul><ul><li>Velocidade </li></ul></ul><ul><ul><ul><li>É um meio eficiente de executar um comando mais de uma vez. O comando é analisado e preparado para execução no próprio banco de dados. </li></ul></ul></ul><ul><ul><li>Segurança </li></ul></ul><ul><ul><ul><li>Reduz a possibilidade de SQL Injection. </li></ul></ul></ul>
  24. 24. PDO <ul><li>Interface comum para acesso a vários bancos de dados; </li></ul><ul><li>Escrito em C e com excelente performance; </li></ul><ul><li>Suporte a: MySQL, PostgreSQL, Firebird, SQLite, Oracle, ODBC, MSSQL, Sybase, Informix, FreeTDS. </li></ul><ul><li>Usa UNIX Socket caso o host seja definido como localhost e tal recurso esteja disponível: </li></ul><ul><ul><li>$con = new PDO( 'mysql:host=localhost;dbname=prog_web' , </li></ul></ul><ul><ul><li>'root' , '' ); </li></ul></ul><ul><li>Pode-se também definir o uso de UNIX Socket explicitamente: </li></ul><ul><ul><li>$con = new PDO( 'mysql:unix_socket;dbname=prog_web' , </li></ul></ul><ul><ul><li>'root' , '' ); </li></ul></ul>
  25. 25. MySQL via PDO <?php try { $con = new PDO( 'mysql:host=localhost;dbname=prog_web' , 'root' , '' ); $stmt = $con ->prepare( &quot;SELECT * FROM pessoas &quot; ); $stmt ->execute(); $resultado = $stmt ->fetchAll(); print_r( $resultado ); } catch (PDOException $ex ) { echo $ex ->getMessage(); die (); } ?>
  26. 26. MySQL via PDO <?php try { $nome = 'R' ; $con = new PDO( 'mysql:host=localhost;dbname=prog_web' , 'root' , '' , array (PDO::ATTR_PERSISTENT => true )); $sql = &quot;SELECT * FROM pessoas WHERE nome LIKE concat(:nome,'%')&quot; ; $stmt = $con ->prepare( $sql ); $stmt ->bindParam( ':nome' , $nome ); $stmt ->setFetchMode(PDO::FETCH_ASSOC); $stmt ->execute(); $resultado = $stmt ->fetchAll(); print_r( $resultado ); } catch (PDOException $ex ) { echo $ex ->getMessage(); die (); } ?>
  27. 27. MySQL via PDO <?php try { $nome = 'Regis' ; $fone = '1234' ; $email = 'regis@cefetpi.br' ; $con = new PDO( 'mysql:host=localhost;dbname=prog_web' , 'root' , '' , array (PDO::ATTR_PERSISTENT => true )); $sql = 'INSERT INTO pessoas (nome,fone,email) VALUES (:nome,:fone,:email) ' ; $stmt = $con ->prepare( $sql ); $stmt ->bindParam( ':nome' , $nome ); $stmt ->bindParam( ':fone' , $fone ); $stmt ->bindParam( ':email' , $email ); $stmt ->execute(); } catch (PDOException $ex ) { echo $ex ->getMessage(); die (); } ?>
  28. 28. Obtendo informações sobre PDO <?php $con = new PDO( 'mysql:host=localhost;dbname=prog_web' , 'root' , '' , array (PDO::ATTR_PERSISTENT => true )); $attributes = array ( &quot;AUTOCOMMIT&quot; , &quot;ERRMODE&quot; , &quot;CASE&quot; , &quot;CLIENT_VERSION&quot; , &quot;CONNECTION_STATUS&quot; , &quot;ORACLE_NULLS&quot; , &quot;PERSISTENT&quot; , &quot;PREFETCH&quot; , &quot;SERVER_INFO&quot; , &quot;SERVER_VERSION&quot; , &quot;TIMEOUT&quot; ); foreach ( $attributes as $val ) { echo &quot;PDO::ATTR_ $val : &quot; ; echo $con ->getAttribute(constant( &quot;PDO::ATTR_ $val &quot; )) . '<br/>' ; } ?>

×