Anda di halaman 1dari 41

PROGRAMAO DE APLICAES WEB

Prof. Dany Sanchez Dominguez dsdominguez@gmail.com Ramal: 5212 NBCGIB Sala 01 Bacharelado em Cincia da Computao UESC - 2013
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 1

Tema 6 Integrando o SGDB MySQL com PHP


Bacharelado em Cincia da Computao UESC - 2013
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 2

Roteiro
1. Introduo 2. SGDB MySQL 3. Conexo ao banco de dados 4. Consultar 5. Inserir 6. Atualizar 7. Apagar 8. Seminrio
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 3

Introduo
Aplicao web simples
http - request

CLIENTE
http - response Navegador

SERVIDOR WEB

Persistncia de dados?
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 4

Introduo
A persistncia de dados essencial ao funcionamento de aplicaes computacionais, As aplicaes web no se adaptam aos mecanismos convencionais de persistncia de dados, Em aplicaes cliente-servidor geralmente a camada de persistncia implementada atravs de um banco de dados (BD), Em aplicaes web o BD tambm permite incluir novas funcionalidades na aplicao.
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 5

Introduo
Aplicao web com camada de persistncia
http - request

CLIENTE
http - response Navegador

SERVIDOR WEB

SQL - request SQL - response

SERVIDOR BD

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 6

Introduo
Banco de dados: uma coleo estruturada de registros ou dados que so armazenados em um sistema computacional, A estruturao alcanada ao organizarmos os dados de acordo com um modelo de banco de dados, Modelos de banco de dados: Modelo Relacional Modelo Hierrquico Modelo de rede
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 7

Introduo
Os bancos de dados so suportados por programas especficos denominados, Sistemas Gerenciadores de Bancos de Dados (SGBDs), Os SGDBs so categorizados conforme o modelo de banco de dados que suportem, Modelo relacional: A estrutura bsica de dados a tabela onde informaes de uma entidade so armazenadas em formas de linhas e colunas, As colunas enumeram os atributos da entidade,
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 8

Introduo
Modelo relacional:
As linhas, chamadas de registros, representam instancias da entidade, Para manipular o banco de dados se utilizam comandos SQL, SQL, structured query language, Comandos SQL: SELECT, INSERT, UPDATE, DELETE.

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 9

O SGDB MySQL
MySQL, Sistema Gerenciador de Bancos de Dados Relacionais (SGBDR), As primeiras verses de MySQL tiveram muitos detratores pois no suportavam caractersticas avanadas de SQL (subquerys, chaves externas), As mais modernas verses tm incorporado estas caractersticas, entretanto ainda no um SGDBR completo, O nico SGDBRs que foi criado e desenvolvido para atender as necessidades de aplicaes web.
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 10

O SGDB MySQL
Vantagens:
Baixo custo, gratuito para uso no comercial, Facilidade de uso, ampla documentao, Diversos mecanismos para trabalhar com PHP, Multiplataforma, Veloz e eficiente.

Desvantagens:
Proprietrio para uso comercial, Atualmente, no suporta todos os comandos SQL.
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 11

O SGDB MySQL
Histrico:
1979 - Unireg: Widenious (Monty) criou o Unireg, um banco de dados no-SQL para grandes tabelas 1994 - Widenious iniciou o desenvolvimento de um SGBD baseado no Unireg; API baseado no-SQL, gerenciador open source 1995 - A MySQL AB lana a primeira verso binrio para Linux e Solaris 1998 - Lanada a primeira verso para windows NT
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 12

O SGDB MySQL
Histrico:
2005 - MySQL 5.0.4 (inclui todas as funcionalidades SQL) 2008 - A MySQL AB adquirida pela Sun Microsystems (1 bilho USD) 2009 - A Oracle compra a Sun e todos seus produtos

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 13

Tipos de dados em MySQL


Numricos:
BIT[(M)] - Campo de bits, sendo M o numero de bits de um valor, padro M=1 TINYINT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro pequeno, -128 a 127, ou 0 a 255 BOOL - Booleano, zero = false , <> zero = true INT[(M)] [UNSIGNED] [ZEROFILL] - Inteiro convencional DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] Valor de ponto flutuante, M numero total de dgitos (padro 10), D dgitos aps o ponto decimal (padro 0)
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 14

Tipos de dados em MySQL


Numricos:
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] - Ponto flutuante de preciso simples DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] - Ponto flutuante de preciso dupla

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 15

Tipos de dados em MySQL


Data e Hora:
DATE - Uma data, O formato default 'YYYYMM-DD' TIME - Uma hora, 'HH:MM:SS' DATETIME - Uma combinao de data e hora, 'YYYY-MM-DD HH:MM:SS' TIMESTAMP - Data e hora como inteiro (numero de segundos desde '1970-01-01 00:00:00') YEAR[(2|4)] - Uma ano no formato de 2 ou 4 dgitos

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 16

Tipos de dados em MySQL


Strings e binrios:
CHAR(M) - strings de tamanho fixo entre 1 e 255 caracteres VARCHAR(M) - strings de tamanho flexvel entre 1 e 255 caracteres BINARY(M) - strings de tamanho fixo armazenadas em binrio VARBINARY(M) - strings de tamanho flxivel em binrio TEXT/BLOB - strings entre 255 e 65535 caracteres. A diferena entre TEXT e BLOB que no primeiro o texto armazenado como caracteres no segundo em binrio BLOB - pode ser usado com imagens e outros dados binrios
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 17

O SGDB MySQL
Ferramenta phpMyAdmin:
Aplicao web desenvolvida em PHP, Permite criar, manipular e manter o banco de dados, Utilizao: Criar DB, Importar, Exportar

Ferramenta MySQL Workbench:


Multi-plataforma, Funes avanadas, Recomendada pelo MySQL Utilizao: Criar DB, Eng. Reversa
Tema 6 Slide 18

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Conexo
Requisitos: SGDB Usurio e senha Banco de dados Para acessar um BD MySQL desde um script PHP devemos: Abrir uma conexo com o servidor
mysql_connect($host_name, $user, $password)

Selecionar o BD
mysql_select_db($db_name)
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 19

Conexo
A funo mysql_connect() retorna um identificador de conexo ou FALSE em caso de falha, Se nosso script utiliza uma nica conexo o gerenciamento no necessrio, A funo mysql_select_db() define o banco de dados ativo, retorna TRUE ou FALSE, Em caso de falha uma descrio detalhada do erro pode ser obtida com a funo
mysql_error()
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 20

Conexo
Como todos nossos scripts iro a utilizar o BD recomendvel criar uma biblioteca para realizar estas funes e incluir-la em nossos scripts,
<?php $db_host $db_user $db_pass $db_name = = = = "localhost"; "pweb"; "pwebsql"; "db_livros";

if (!mysql_connect($db_host, $db_user, $db_pass)) die(mysql_error()); if (!mysql_select_db($db_name)) die(mysql_error()); ?>


Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 21

Consultar o BD
Clausula SELECT
SELECT campo1, campo2, campo3 FROM tabela_nome WHERE condicao ORDER BY campo

Exemplos:
SELECT nome, email FROM agendas SELECT * FROM agendas WHERE sexo = M SELECT nome, email, sexo FROM agendas WHERE TRUE ORDER BY nome

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 22

Consultar o BD
Para executar uma consulta no banco de dados utilizamos a funo:
$result = mysql_query(CLAUSULA_SQL);

O resultado da funo um inteiro indicando sucesso ou falha ao executar a consulta, Os dados resultantes da consulta (se houver) so colocados em uma rea de armazenamento temporrio, Este inteiro pode ser utilizado para acessar e manipular estes dados,
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 23

Consultar o BD
Para acessar os dados na rea de armazenamento temporrio usamos as funes mysql_fetch (fetch = trazer)
- mysql_fetch_row: retorna a linha como um array

numerado,
- mysql_fetch_object: retorna a linha como um

objeto,
- mysql_fetch_array: retorna a linha como um

array associativo. O cursor de consultas.


Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 24

Consultar o BD
Exemplo (mysql_fetch_row)
<?php $str_query = "SELECT nome, email, sexo ". "FROM agendas WHERE TRUE ORDER BY nome"; $result = mysql_query($str_query); while($row = mysql_fetch_row($result)) print("$row[0]-$row[1]-$row[2]<br>\n"); ?>

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 25

Consultar o BD
Exemplo (mysql_fetch_object)
<?php $str_query = "SELECT nome, email, sexo". " FROM agendas WHERE TRUE ORDER BY nome"; $result = mysql_query($str_query); while($row = mysql_fetch_object($result)) print("$row->nome-$row->email-$row->sexo<br>\n"); ?>

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 26

Consultar o BD
Exemplo (mysql_fetch_array)
<?php $str_query = "SELECT nome, email, sexo". " FROM agendas WHERE TRUE ORDER BY nome"; $result = mysql_query($str_query); while($row = mysql_fetch_array($result)) echo $row['nome']."-". $row['email']."-". $row['sexo']."<br>\n"; ?>
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 27

Consultar o BD
Ao consultar um banco de dados a funo
mysql_num_rows($result)

retorna o numero de registros resgatados na consulta. Exemplo: mysql.lib index.php Conexo com o banco de dados Consultas ao banco de dados Percurso nos resultados da consulta
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 28

Inserir no BD
Para inserir dados no BD utilizamos a funo mysql_query($slq_insert) empleando como parmetro uma clausula SQL de insero, Clausula INSERT
INSERT INTO tabela_nome (col1, col2, col3) VALUES (val1, val2, val3)

Exemplo:
INSERT INTO agendas (nome, email, sexo) VALUES ('Dany Sanchez', 'dsdominguez@gmail.com', 'M')
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 29

Inserir Strings no BD
Ao inserirmos strings no banco de dados devemos prestar ateno alguns caracteres que podem ser interpretados como caracteres de controle, Caracteres problemticos:
Aspas (simples e duplas) Barra invertida (\) Caractere nulo (NULL)

Esses caracteres devem escapar da string Para escapar os caracteres adicione uma barra invertida na frente deles
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 30

Inserir Strings no BD
String com caracteres especiais
A casa "verde" \caiou\.

String com aps o escape


A casa \"verde\" \\caiou\\.

Existem duas funes em php para fazer o escape dos caracteres de controle addslahes() recebe uma string e retorna ela reformatada stripslahes() recebe uma string e remove as barras de escape
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 31

Inserir Strings no BD
Para facilitar o tratamento dos caracteres de controle as verses recentes de PHP incorporam a diretiva de ambiente:
magic_quotes_gpc

GPC = GET, POST, Cookies A funo get_magic_quotes_gpc() verifica o estado (TRUE ou FALSE) da diretiva

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 32

Inserir Strings no BD
Antes de inserir no BD:
if(!get_magic_gpc()){ $str = addslahes($str); }

Aps recuperar do BD
if(!get_magic_gpc()){ $str = stripslahes($str); }

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 33

Atualizar dados no BD
Para atualizar dados no BD utilizamos a funo mysql_query($slq_upd) empleando como parmetro uma clausula SQL de atualizao, Clausula UPDATE
UPDATE tabela_nome SET campo1='val1', campo2='val2', campo3='val3' WHERE condio

Exemplos:
UPDATE agendas SET nome='Julio', email='jspt@uesc.br' WHERE id = 7 UPDATE agendas SET sexo='F'

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 34

Apagando dados do BD
Para apagar dados dados no BD utilizamos a funo mysql_query($slq_del) empleando como parmetro uma clausula SQL de eliminao, Clausula DELETE
DELETE FROM tabela_nome WHERE condio

Exemplos:
DELETE FROM agendas WHERE id = 7 DELETE FROM agendas

Seja cuidadoso clausulas UPDATE e DELETE sem a condio WHERE afetaram todos os registros da tabela!!!
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 35

Atualizar e Apagar
Para conhecer os registros afetados aps uma query de insero, atualizao ou eliminao podemos usar a funo
int mysql_affected_rows ([ resource $link ] )

Obtm o nmero de linhas atingidas pela consulta INSERT, UPDATE, ou DELETE mais recente

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 36

Exemplo -

Minha estante de livros

Consultando, inserindo, atualizando e removendo registros no banco de dados mysql.lib, index.php, add_livro.php Inserindo e atualizando dados de formulrio Um nico scripts 5 comportamentos
Mostra formulrio em branco (adicionar, haction=) Insere novo livro (adicionar, haction=inserir) Mostra formulrio com dados (modificar, haction=modificar ) Atualiza dados de um livro (modificar, haction=atualizar) Apaga um livro (apagar, haction=apagar)

Combinando os mtodos GET e POST


Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 37

Exemplo

Minha estante de livros

Que falta no exemplo?


Validao (no cliente e no servidor) Escapar as strings Verificar e informar aes (apagar e atualizar) Mensagens informativos.

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 38

Biblioteca MySQL Improved


As verses mais recentes (>4) do PHP incluem a biblioteca mysqli (improved) Esta biblioteca utiliza um novo protocolo de conexo mais rpido Permite utilizar os recursos avanados das verses modernas do MySQL (transaes, multiples staments, ...) A biblioteca da suporte ao trabalho com
Programao estruturada, Programao orientada a objetos de forma nativa.
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 39

Biblioteca MySQL Improved


Objetos:
$link = new mysqli( $host, $user, $pass) $link->select_db($database) $result = $mysqli->query($sql) $num = $result->num_rows

Procedural
$link = mysqli_connect( $host, $user, $pass) mysqli_select_db($database) $result = $mysqli_query($sql) $num = $mysqli_num_rows($result)
Prof. Dany S. Dominguez/dsdominguez@lgmail.com Tema 6 Slide 40

Seminrio
Segurana com MySQL SQL Injection A biblioteca MySQLi Recursos avanados Vantagens Data: 08/11/2012

Prof. Dany S. Dominguez/dsdominguez@lgmail.com

Tema 6 Slide 41

Anda mungkin juga menyukai