aula_11_php e mysql

34
PHP e MySQL Programação Dinamica

Upload: johnatas-ferreira

Post on 18-Dec-2015

256 views

Category:

Documents


2 download

DESCRIPTION

Aula_11_PHP e MySQL

TRANSCRIPT

  • PHP e MySQL

    Programao Dinamica

  • 2PHP e MySQL

    PHP possui 3 interfaces para se comunicar com um banco de dados MySQL. O conjunto de funes mysql_* O conjunto de funes mysqli_* A interface orientada a objeto PEAR::DB

    Uso geral para vrios SGBDs diferentes

  • 3mysql_connect

    mysql_connect($servidor, $usuario, $senha) Conecta ao servidor MySQL com os parmetros

    especificados. Retorna um identificador de conexo em caso de

    sucesso, ou FALSE em caso de erro.

  • 4mysql_error

    mysql_error() Retorna a ltima mensagem de erro emitida

    pelo MySQL

    die($msg) Exibe a mensagem especificada e encerra o

    programa. Usado apenas para debug.

  • 5mysql_select_db

    mysql_select_db($nomedb, [$link]) Seleciona o banco de dados a ser usado. Retorna TRUE ou FALSE, em caso de sucesso e

    erro, respectivamente. Se $link no for especificado, utiliza a ltima

    conexo aberta.

  • 6mysql_close

    mysql_close($link) Fecha a conexo com o banco de dados. Normalmente no necessrio: a conexo

    fechada automaticamente aps trmino da execuo da pgina.

    Se $link no for especificado, utiliza a ltima conexo aberta.

    Retorna TRUE ou FALSE, em caso de sucesso e erro, respectivamente.

  • 7Exemplo

    $link = mysql_connect('localhost', 'root', '');if(!$link)

    die("Erro ao conectar: " . mysql_error());if(!mysql_select_db('music2'))

    die("Erro ao selecionar o banco de dados:" . mysql_error());mysql_close();

  • 8Separando a conexo

    Geralmente, o cdigo que realiza a conexo ao banco de dados mantido em um arquivo separado contendo apenas estes comandos, com as informaes necessrios.

    O cdigo, ento, includo no incio de cada arquivo.

  • 9Separando a conexo

  • 10

    mysql_query

    mysql_query($sql, [$link]) Envia uma consulta SQL ao servidor

    identificado por $link (opcional). Em caso de falha, retorna FALSE.

  • 11

    mysql_query

    mysql_query($sql, [$link]) Em caso de sucesso:

    Para comandos que no resultam em uma tabela (INSERT, UPDATE, etc...), retorna TRUE.

    Para comandos que resultam em uma tabela (SELECT, SHOW, etc...), retorna um recurso que representa o resultado.

  • 12

    mysql_num_[rows|fields]

    mysql_num_rows ($res) Retorna o nmero de colunas do resultado

    especificado. mysql_num_fields ($res)

    Retorna a quantidade de campos do resultado especificado.

  • 13

    Exemplo

    $res = mysql_query('SELECT * FROM cd NATURAL JOIN artista');

    if(!$res)die("Erro na consulta SQL: " .

    mysql_error());$nlinhas = mysql_num_rows($res);$ncampos = mysql_num_fields($res);echo "A tabela retornada tem $ncampos campos e $nlinhas linhas.";

  • 14

    Exemplo

    Resultado:

    A tabela retornada tem 5 campos e 7 linhas.

  • 15

    mysql_fetch_(row|assoc)

    mysql_fetch_row($res) Retorna uma linha do resultado como um

    array numrico, e avana o ponteiro interno do recurso para a prxima posio.

    Retorna FALSE se no h mais linhas no resultado.

    mysql_fetch_assoc($res) Como mysql_fetch_row, mas retorna a

    linha como um array associativo.

  • 16

    Exemplo: mysql_fetch_row

    $res = mysql_query('SELECT * FROM cd NATURAL JOIN artista');

    $nlinhas = mysql_num_rows($res);$ncampos = mysql_num_fields($res);echo "A tabela retornada tem $ncampos campos e $nlinhas linhas:";while($linha = mysql_fetch_row($res)){

    echo implode(', ', $linha), '';}

  • 17

    Sada

  • 18

    Exemplo: mysql_fetch_assoc$res = mysql_query(

    'SELECT * FROM cd NATURAL JOIN artista');$nlinhas = mysql_num_rows($res);$ncampos = mysql_num_fields($res);echo "A tabela retornada tem $ncampos campos e $nlinhas linhas:";while($linha = mysql_fetch_assoc($res)){

    echo "Artista: $linha[nome]";

    echo "Ttulo do CD: $linha[titulo]";echo "Lanamento: $linha[lancamento]";echo '';

    }

  • 19

    Sada

  • 20

    Exemplo

    require_once('bd.php');$usuario = $_POST['usuario'];$senha = $_POST['senha'];$sql = "SELECT * FROM usuarios WHERE login = '$usuario' AND senha = '$senha'";mysql_query($sql);

  • 21

    Uso

    SELECT * FROM usuarios WHERE login = 'admin' AND senha = 'dj5c4v'

  • 22

    SQL Injection

    SELECT * FROM usuarios WHERE login = 'admin' -- ' AND senha = ''

  • 23

    Exemplo 2

    require_once('bd.php');$nome = $_GET['nome'];$sql = "SELECT * FROM clientes WHERE nome = '$nome'";mysql_query($sql);

  • 24

    Uso

    SELECT * FROM clientes WHERE nome = 'Ruppert Barnes'

  • 25

    SQL Injection

    SELECT * FROM clientes WHERE nome = ''OR '1'

  • 26

    mysql_real_escape_string

    mysql_real_escape_string($string) Retorna um string com os valores de escape

    adicionados aos caracteres \x00, \n, \r, \, ', " e \x1a, no string original.

    Sempre deve ser usada em qualquer string oriunda de uma fonte externa que vai ser includa em uma consulta SQL.

    Evita a maioria dos ataques de SQL Injection.

  • 27

    Exemplorequire_once('bd.php');$usuario = mysql_real_escape_string($_POST['usuario']);$senha = mysql_real_escape_string($_POST['senha']);$sql = "SELECT * FROM usuarios WHERE login = '$usuario' AND senha = '$senha'";mysql_query($sql);

  • 28

    Tentativa de Ataque

    SELECT * FROM usuarios WHERE login = 'admin\' -- ' AND senha = ''

  • 29

    magic_quotes_gpc

    H uma configurao de PHP que automaticamente adiciona caracteres de escape a qualquer varivel submetida via GET ou POST

    magic_quotes_gpc On Off

    til por razes de segurana, mas pode entra em conflito com mysql_real_escape_string

  • 30

    Problema com magic_quotes_gpc

    SELECT * FROM usuarios WHERE login = 'O\\\'Reilly' AND senha = 'grt4gf'

  • 31

    Lidando com magic_quotes

    get_magic_quotes_gpc() Retorna TRUE ou FALSE, de acordo com o

    valor da configurao magic_quotes_gpc stripslashes($string)

    Retorna uma string sem os caracteres de escape, desfazendo o efeito de magic_quotes_gpc

  • 32

    Lidando com magic_quotes_gpc

    SELECT * FROM usuarios WHERE login = 'O\'Reilly' AND senha = 'grt4gf'

  • 33

    http://xkcd.com/327

  • 34

    http://xkcd.com/327

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34