Anda di halaman 1dari 10

PDO em PHP Aula 28

PDO uma classe que representa a conexo entre o PHP e a base de dados.
Neste tutorial voc vai aprender a manipular dados de BDs MySQL com a PDO
Class.
Trabalhar com PHP sinnimo de trabalhar com pginas dinmicas, e no h a possibilidade de
imaginar pginas dinmicas sem uma base de dados onde salvar os dados.
PDO uma classe PHP que representa a conexo entre o PHP e o servidor de banco de dados.
Com essa classe possvel adicionar, excluir e editar dados presentes em bancos de dados e
tabelas de vrios SGBDs diferentes, tais como MySQL, SQLite, PostgreSQL, e outros.
Para esse tutorial em especco, vamos aprender a conectar e manipular dados de bases de
dados MySQL utilizando PDO.
Ento vamos l.
1
2
3
4
5
6
7
8

Criando o banco de dados


PDO Conectando-se base de dados
Exibindo dados na tabela MySQL com PDO
Inserindo dados na tabela MySQL com PDO
Editando dados da tabela MySQL com PDO
Excluindo dados da tabela MySQL com PDO
Vdeo tutorial: PDO em PHP
Concluindo

Criando o banco de dados


Antes de qualquer coisa, precisamos criar uma base de dados em nosso servidor MySQL para
conectar-se posteriormente com PDO. Felizmente, ontem explicamos como fazer isso utilizando
o phpMyAdmin:
Crie tabelas e bases de dados no phpMyAdmin
Vou criar uma base de dados chamada contatos.
Voc pode fazer isso pelo phpMyAdmin (como explicado no artigo mencionado anteriormente),
ou diretamente pelo servidor MySQL. Se estiver utilizando o servidor MySQL, vou detalhando o
que vou fazer, e logo em seguida mostrarei o comando.
Comando MySQL:
1

CREATE DATABASE `contatos`;

Depois criei um usurio chamado user_db_contatos, senha senha_db_contatos, com


permisso somente na base de dados contatos.

PDO em PHP - Aula 28 - TutsUP

1 de 10

Comando MySQL:
1

CREATE USER 'user_db_contatos' @'%' IDENTIFIED BY 'senha_db_contatos' ;

FLUSH PRIVILEGES;

GRANT ALL ON `contatos`.* TO 'user_db_contatos'@'%';

Logo em seguida, criei uma tabela chamada tabela_contatos com os seguintes campos:
ID contato_id
Nome - contato_nome
Sobrenome - contato_sobrenome
Email - contato_email
Site - contato_site
Data de nascimento contato_data_nascimento
Telefone - contato_telefone
Descrio - contato_descricao
Comando MySQL:
1

CREATE TABLE `contatos`.`tabela_contatos` (

`contato_id` INT (11) NOT NULL AUTO_INCREMENT,

`contato_nome` VARCHAR (40),

`contato_sobrenome` VARCHAR (40),

`contato_email` VARCHAR (50),

`contato_site` VARCHAR (255),

`contato_data_nascimento` DATETIME DEFAULT '0000-00-00 00:00:00',

`contato_telefone` VARCHAR (25),

`contato_descricao` TEXT,

10

PRIMARY KEY (`contato_id`)

11

) ;

Perceba que no podemos adicionar acentos, ou caracteres estranhos para o nome de nossos
campos, portanto, tente utilizar apenas letras, nmeros e um caractere sublinhado (underline)
para separar as palavras.
Crie a base de dados, o usurio e a tabela e vamos para a prxima parte da aula.

PDO Conectando-se base de dados


Depois de congurar a base de dados, podemos iniciar a congurao de nosso script de
conexo PDO em PHP.
Vamos separar a conexo do arquivo principal, portanto, crie dois arquivos:
index.php Ter a congurao que o usurio vai ver na tela do navegador (sem PDO);
conexao.php Ter a congurao do nosso script PDO (ser embutido no arquivo

PDO em PHP - Aula 28 - TutsUP

2 de 10

index.php);
Aps a criao, abra o arquivo "conexao.php" e crie as seguintes variveis:
1

<?php

/* Variveis para conexo PDO */

$base_dados = 'contatos';

$usuario_bd = 'user_db_contatos';

$senha_bd

= 'senha_db_contatos';

$host_db

= 'localhost';

Perceba que vou utilizar os dados das variveis acima para a conexo PDO com a base de
dados, portanto, preencha os valores corretamente. Se voc alterou alguma coisa
anteriormente, tambm ter que alterar os dados nas variveis acima.
Para criar uma instncia da classe PDO, basta fazer o seguinte:
1

// Instncia PDO

$conexao_pdo = new PDO('mysql:host=IP_OU_HOST_AQUI;dbname=NOME_DO_BD', 'USURIO'

Para a nossa conexo, vamos deixar isso um pouco mais simples:


1

<?php

/* Variveis PDO */

$base_dados = 'contatos';

$usuario_bd = 'user_db_contatos';

$senha_bd

= 'senha_db_contatos';

$host_db

= 'localhost';

$conexao_pdo = null;

8
9

/* Concatenao das variveis para detalhes da classe PDO */

10

$detalhes_pdo = 'mysql:host=' . $host_db . ';dbname='. $base_dados;

11
12

// Tenta conectar

13

try {

14

// Cria a conexo PDO com a base de dados

15

$conexao_pdo = new PDO($detalhes_pdo, $usuario_bd, $senha_bd);

16

} catch (PDOException $e) {

17

// Se der algo errado, mostra o erro PDO

18

print "Erro: " . $e->getMessage() . "<br/>";

19
20

// Mata o script

21

die();

PDO em PHP - Aula 28 - TutsUP

3 de 10

22

23

?>

Voc no precisa decorar isso, apenas altere os valores das variveis e pronto, conectado base
de dados com a classe PDO instanciada em $conexao_pdo.

Exibindo dados na tabela MySQL com PDO


ATENO: Voc vai precisar saber comandos MySQL para continuar essa leitura, caso no saiba
nada, leia nos links abaixo:
Comandos bsicos do MySQL (Insert, Delete, Update e Select)
MySQL: comandos bsicos
Agora abra o arquivo index.php (ou o arquivo que voc tiver criado anteriormente) e, na
primeira linha, coloque o seguinte:
1

<?php include('conexao.php');?>

A funo include do PHP faz a incluso do que escrevemos no arquivo conexao.php para o
arquivo index.php, assim nosso script car mais organizado.
Para iniciar qualquer ao com PDO, primeiramente temos que preparar o comando a ser
executado pelo MySQL com o mtodo PDO::prepare.
Veja um exemplo:
1

// A classe PDO prepara o comando a ser executado

$prepara = $conexao_pdo->prepare('SELECT * FROM tabela_contatos');

Como voc pode perceber acima, estamos preparando nosso servidor MySQL para receber o
comando "SELECT * FROM tabela_contatos" (selecione tudo da tabela tabela_contatos).
Feito isso, necessrio executar o comando:
1

// A classe PDO executa o comando

$prepara->execute();

Agora o comando que havamos enviado anteriormente executado. Porm, agora precisamos
de mais um recurso para visualizar os dados, PDO::fetch. Este mtodo nos retorna a linhas de
uma consulta SQL, alm disso, retorna true enquanto houver novas linhas. Isso indica que
podemos utilizar o lao while para mostrar tudo o que for encontrado pelo comando que
executarmos.
Por exemplo:
1

// Lao para exibir todas as linhas

PDO em PHP - Aula 28 - TutsUP

4 de 10

while ( $linha = $prepara->fetch() ) {

echo 'Nome: ' . $linha['contato_nome'] . '<br>';

echo 'Sobrenome: ' . $linha['contato_sobrenome'] . '<br>';

// ... E assim por diante ...

Observao: Voc deve adicionar dados na tabela, caso contrrio, nada ser exibido na tela.
Perceba que voc deve saber o nome dos campos que deseja exibir para utilizar com a varivel
criada na condio do lao while.
Quando precisamos enviar parmetros para o comando selecionar um ID em especco, por
exemplo devemos enviar um interrogao (?) para cada parmetro.
Veja um exemplo:
1

// Prepara o comando a ser executado

$prepara = $conexao_pdo->prepare('SELECT * FROM tabela_contatos WHERE contato_id = ?'

Perceba que estamos agora enviando o seguinte comando para o servidor MySQL: SELECT *
FROM tabela_contatos WHERE contato_id = ? (selecione tudo da tabela tabela_contatos onde
campo contato_id igual a ? ).
Esse interrogao ser enviado para o mtodo PDO::execute como um array. Veja:
1

// Parmetros do comando SQL

$parametros = array( 2 );

3
4

// Executa o comando

$prepara->execute( $parametros );

Ou seja, meu primeiro interrogao ser substitudo pelo nmero 2, que estou enviando como
parmetro.
Caso precise enviar mais parmetros, basta adicionar interrogaes em todos os locais onde
iriam os valores, depois adicionar os valores no array de parmetros. Por exemplo:
1

// Prepara o comando a ser executado

$prepara = $conexao_pdo->prepare('SELECT * FROM tabela_contatos WHERE contato_id = ? OR

3
4

// Parmetros do comando SQL

$parametros = array( 2, 1 );

6
7

// Executa o comando

$prepara->execute( $parametros );

PDO em PHP - Aula 28 - TutsUP

5 de 10

10

// Lao para exibir todas as linhas

11

while ( $linha = $prepara->fetch() ) {

12

echo 'Nome: ' . $linha['contato_nome'] . '<br>';

13

echo 'Sobrenome: ' . $linha['contato_sobrenome'] . '<br>';

14

// ... E assim por diante ...

15

Agora estou pedindo para exibir os IDs 1 e 2.


Voc pode utilizar qualquer tipo de consulta, como "BETWEEN", "LIKE", e demais. Por exemplo,
suponhamos que eu queira utilizar LIKE, veja:
1

<?php include('conexao.php');?>

2
3

<?php

// Prepara o comando a ser executado

$prepara = $conexao_pdo->prepare(

'SELECT

FROM

tabela_contatos

10

WHERE contato_nome LIKE ?

11

OR contato_nome LIKE ?'

12

);

13
14

// Parmetros do comando SQL

15

$parametros = array( '%pedao do nome%', '%outro pedao%' );

16
17

// Executa o comando

18

$prepara->execute( $parametros );

19
20

// Lao para exibir todas as linhas

21

while ( $linha = $prepara->fetch() ) {

22

echo 'Nome: ' . $linha['contato_nome'] . '<br>';

23

echo 'Sobrenome: ' . $linha['contato_sobrenome'] . '<br>';

24

// ... E assim por diante ...

25

Perceba tambm que s iremos utilizar o lao while quando utilizarmos o comando "SELECT",
para "UPDATE", "INSERT" e "DELETE", no necessrio (vamos falar sobre cada um dos
comandos).

Inserindo dados na tabela MySQL com PDO


PDO em PHP - Aula 28 - TutsUP

6 de 10

Para inserir dados na tabela, siga a mesma estrutura, porm, no necessrio utilizar o lao
while.
Por exemplo:
1

<?php include('conexao.php');?>

2
3

<?php

// Prepara o comando a ser executado

$prepara = $conexao_pdo->prepare(

"INSERT INTO `contatos`.`tabela_contatos` (

`contato_nome`,

`contato_sobrenome`,

`contato_email`,

10

`contato_site`,

11

`contato_data_nascimento`,

12

`contato_telefone`,

13

`contato_descricao`

14

15

VALUES (

16

?,

17

?,

18

?,

19

?,

20

?,

21

?,

22

23
24

)"
);

25
26

// Parmetros do comando SQL

27

$parametros = array(

28

'Jos',

29

'Silva de Oliveira',

30

'contato@tutsup.com',

31

'http://www.tutsup.com',

32

'1987-04-20 13:45:57',

33

'+553588888888',

34

'Meu nome Jos Silva de Oliveira e tenho 27 anos.'

35

);

36
37

// Executa o comando

PDO em PHP - Aula 28 - TutsUP

7 de 10

38

$verifica = $prepara->execute( $parametros );

39
40

// Verifica se o comando foi executado

41

if ( $verifica ) {

42
43

echo 'Dados enviados base de dados com sucesso';


} else {

44

$erro = $prepara->errorInfo();

45

echo 'Ocorreu um erro na sua consulta. <br>';

46

echo 'Erro: ' . $erro[2];

47

Verique que agora inseri dados na base de dados, e mesmo assim tudo continua o mesmo.
Onde eu deveria colocar valores; coloco interrogaes. Depois substituo os pontos de
interrogao por valores do array de parmetros. Os pontos de interrogao sero substitudos
na mesma ordem em que foram adicionados no array.
Como o mtodo PDO::execute retorna true se o comando for executado com sucesso, podemos
fazer a vericao para saber se os dados foram enviados para a base de dados corretamente:
1

// Verifica se o comando PDO foi executado com sucesso

if ( $verifica ) {

3
4

echo 'Dados enviados base de dados com sucesso';


} else {

$erro = $prepara->errorInfo();

echo 'Ocorreu um erro na sua consulta. <br>';

echo 'Erro: ' . $erro[2];

Editando dados da tabela MySQL com PDO


Para editar dados no muda muita coisa, porm, mais seguro se enviarmos o ID da linha que
queremos editar. Veja:
1

<?php include('conexao.php');?>

2
3

<?php

// Prepara o comando a ser executado

$prepara = $conexao_pdo->prepare(

6
7

"UPDATE tabela_contatos SET contato_nome = ? WHERE contato_id = ? "


);

8
9

// Parmetros do comando SQL

10

$parametros = array('Serafim', 6);

PDO em PHP - Aula 28 - TutsUP

8 de 10

11
12

// Executa o comando

13

$verifica = $prepara->execute( $parametros );

14
15

// Verifica se o comando foi executado

16

if ( $verifica ) {

17
18

echo 'Dados enviados base de dados com sucesso';


} else {

19

$erro = $prepara->errorInfo();

20

echo 'Ocorreu um erro na sua consulta. <br>';

21

echo 'Erro: ' . $erro[2];

22

Ou seja, estou executando um comando que modica o nome que estiver na linha de ID 6 para
"Seram". Simples assim.

Excluindo dados da tabela MySQL com PDO


Para excluir dados mais simples ainda.
Basta enviar o comando e executar:
1

<?php include('conexao.php');?>

2
3

<?php

// Prepara o comando a ser executado

$prepara = $conexao_pdo->prepare("DELETE FROM tabela_contatos WHERE contato_id = ?"

6
7

// Parmetros do comando SQL

$parametros = array( 6 );

9
10

// Executa o comando

11

$verifica = $prepara->execute( $parametros );

12
13

// Verifica se o comando foi executado

14

if ( $verifica ) {

15
16

echo 'Linha excluda.';


} else {

17

$erro = $prepara->errorInfo();

18

echo 'Ocorreu um erro na sua consulta. <br>';

19

echo 'Erro: ' . $erro[2];

20

PDO em PHP - Aula 28 - TutsUP

9 de 10

Pronto, agora exclu a linha com ID 6 (contato_id = 6).

Vdeo tutorial: PDO em PHP


Assista a um vdeo tutorial para complementar o artigo acima:

Concluindo
Este o mtodo mais seguro para manipular dados de bases de dados em PHP. Alm de
prevenir SQLInjection, os outros mtodos que utilizvamos antigamente esto obsoletos.

PDO em PHP - Aula 28 - TutsUP

10 de 10