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
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
SERVIDOR BD
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.
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
Tema 6 Slide 13
Tema 6 Slide 15
Tema 6 Slide 16
O SGDB MySQL
Ferramenta phpMyAdmin:
Aplicao web desenvolvida em PHP, Permite criar, manipular e manter o banco de dados, Utilizao: Criar DB, Importar, Exportar
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";
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
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
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"); ?>
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"); ?>
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\.
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
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); }
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'
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
Tema 6 Slide 36
Exemplo -
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)
Exemplo
Tema 6 Slide 38
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
Tema 6 Slide 41