SlideShare a Scribd company logo
1 of 57
Download to read offline
PDO
PHP Data Objects
O que?
Porque?
Como?
PDO
  DB Driver
         DB
NÃO É
abstração de
   banco
ACESSO A
 DADOS
Por que?
Padronização
mysql_connect('host','usuario','senha');




pg_connect('host=host port=5432
dbname=bd user=usuario
password=senha');
Mas eu sempre
  fiz assim!
  Tá errado?
ÓÓ!
Suporte a Transação
Proteção a SQL Injection
Handle de Arquivos
MySQL
          Firebird/Interbase

IBM      MS SQL Server
                  ODBC e DB2
     FreeTDS
             PostgreSQL
Oracle
          Informix    SQLite
Unificar
Transparência
Como?
DSN: String de conexão

  1
$dsn = 'mysql:host=host;port=3306;dbname=bd';
$usuario = 'usuario';
$senha = 'senha';                 Opções de conexão
$opcoes = array(      2
   PDO::ATTR_PERSISTENT => true,
   PDO::ATTR_CASE => PDO::CASE_LOWER
);
                              Executando a conexão
try {                3
   $pdo = new PDO($dsn, $usuario, $senha, $opcoes);
} catch (PDOException $e) {
   echo 'Erro: '.$e->getMessage();
}
try {
   $pdo = new PDO($dsn, $usuario, $senha, $opcoes);
} catch (PDOException $e) {
   echo 'Erro: '.$e->getMessage();
}
É muito feio!
Como laçar consultas?
$db->exec()
$db->query()
$n = $pdo->exec(“INSERT INTO inteiros
(numero) VALUES (1)”);

$id = $pdo->lastInsertId();

echo "Inseridos ”, $n, “ registro(s).n";
Número de registros
afetados, ZERO ou FALSE
Sem resultset!
Não é o ideal para execução
    Repetitiva de SQL
$sql = 'SELECT nome, email FROM
participantes ORDER BY nome';

  foreach ($conn->query($sql) as $row) {
     print $row['nome'] . "t";
     print $row['cor'] . "t";
     print $row['calorias'] . "n";
  }
Em Array
FETCH_NUMBER
FETCH_NAMED / FETCH_ASSOC
FETCH_BOTH
FETCH_OBJ
setAttribute


Construtor
Ainda não é bom para execução
      repetitiva de SQL
prepare

     bind

          execute
Placeholders
Isso não vai
                  prestar :(
No DOIS agente
    corre!
bindParam()
$sql = 'SELECT nome, email, twitter
        FROM participantes
        WHERE idade > :idade AND estado = :estado';

$stmt = $conn->prepare($sql);

$stmt->bindParam(':idade', 18, PDO::PARAM_INT));
$stmt->bindParam(':estado', 'ES', PDO::PARAM_STR,
2));

$stmt->execute();
$rows_es = $stmt->fetchAll();
$sql = 'SELECT nome, email, twitter
        FROM participantes
        WHERE idade > :idade AND estado = :estado';

$stmt = $conn->prepare($sql, array(PDO::ATTR_CURSOR
=> PDO::CURSOR_FWDONLY));

$stmt->execute(array(':idade' => 18, ':estado' =>
'ES'));
$rows_es = $stmt->fetchAll();

$stmt->execute(array('idade' => 25, 'estado' =>
'RJ'));
$rows_rj = $stmt->fetchAll();
$sql = 'SELECT nome, email, twitter
        FROM participantes
        WHERE idade > ? AND estado = ?';

$stmt = $conn->prepare($sql,
array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$stmt->execute(array(18, 'ES'));
$rows_es = $stmt->fetchAll();

$stmt->execute(array(25, 'RJ'));
$rows_rj = $stmt->fetchAll();
Transações
Suporte a Transação
try {

    [ … ]

  $dbh->beginTransaction();
  $dbh->exec("insert into staff (id, first, last) values (23,
'Joe', 'Bloggs')");
  $dbh->exec("insert into salarychange (id, amount,
changedate)
      values (23, 50000, NOW())");
  $dbh->commit();

} catch (Exception $e) {
  $dbh->rollBack();
  echo "Failed: " . $e->getMessage();
}
Arquivos
$stmt = db->prepare("insert into images (id,
contenttype, imagedata) values (?, ?)");

$fp = fopen($_FILES['file']['tmp_name'], 'rb');

$stmt->bindParam(1, $_FILES['file']['type']);
$stmt->bindParam(2, $fp, PDO::PARAM_LOB);

$stmt->execute();
$stmt = $db->prepare("select contenttype, imagedata
from images where id=?");

$stmt->execute(array(5));
$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);

header("Content-Type: $type");
fpassthru($lob);
É fistaile!
O que faço com isso?
ORMs
        Frameworks


Usar!            Você tem twitter?




        Active record
@m3nd3s
m3nd3s@gmail.com
http://www.almirmendes.net/

More Related Content

What's hot

Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlPaulo Damas
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Carlos Santos
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)Breno Vitorino
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPLuis Gustavo Almeida
 
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsIntrodução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsAndre Peres
 
PHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHPPHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHPBruno Neves Menezes
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraFlávio Lisboa
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUIDouglas Lira
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHPzehzinho
 

What's hot (17)

JasperReports
JasperReportsJasperReports
JasperReports
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
Phpex2
Phpex2Phpex2
Phpex2
 
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsIntrodução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
PHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHPPHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHP
 
Do REST ao GraphQL com PHP
Do REST ao GraphQL com PHPDo REST ao GraphQL com PHP
Do REST ao GraphQL com PHP
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 

Viewers also liked

PresentacióN Pigmento 1
PresentacióN Pigmento 1PresentacióN Pigmento 1
PresentacióN Pigmento 1DIMonicaA
 
Palestra de SED - Stream Editor
Palestra de SED - Stream EditorPalestra de SED - Stream Editor
Palestra de SED - Stream EditorAlmir Mendes
 
Arduino Project - Ciclo de palestras CEET Vasco Coutinho
Arduino Project - Ciclo de palestras CEET Vasco CoutinhoArduino Project - Ciclo de palestras CEET Vasco Coutinho
Arduino Project - Ciclo de palestras CEET Vasco CoutinhoAlmir Mendes
 
Apostila automação controle de processos
Apostila automação controle de processosApostila automação controle de processos
Apostila automação controle de processosCiro Marcus
 
Paglakas ng europe merkantilismo
Paglakas ng europe   merkantilismoPaglakas ng europe   merkantilismo
Paglakas ng europe merkantilismoJared Ram Juezan
 

Viewers also liked (12)

PresentacióN Pigmento 1
PresentacióN Pigmento 1PresentacióN Pigmento 1
PresentacióN Pigmento 1
 
Palestra de SED - Stream Editor
Palestra de SED - Stream EditorPalestra de SED - Stream Editor
Palestra de SED - Stream Editor
 
La Celula
La CelulaLa Celula
La Celula
 
Innovacion
InnovacionInnovacion
Innovacion
 
Dicas de SSH
Dicas de SSHDicas de SSH
Dicas de SSH
 
Arduino Project
Arduino ProjectArduino Project
Arduino Project
 
CEJS 0.0.2
CEJS 0.0.2CEJS 0.0.2
CEJS 0.0.2
 
Arduino Project - Ciclo de palestras CEET Vasco Coutinho
Arduino Project - Ciclo de palestras CEET Vasco CoutinhoArduino Project - Ciclo de palestras CEET Vasco Coutinho
Arduino Project - Ciclo de palestras CEET Vasco Coutinho
 
A vitória vem de cima
A vitória vem de cimaA vitória vem de cima
A vitória vem de cima
 
Apostila automação controle de processos
Apostila automação controle de processosApostila automação controle de processos
Apostila automação controle de processos
 
Ang Merkantilismo
Ang MerkantilismoAng Merkantilismo
Ang Merkantilismo
 
Paglakas ng europe merkantilismo
Paglakas ng europe   merkantilismoPaglakas ng europe   merkantilismo
Paglakas ng europe merkantilismo
 

Similar to Palestra de PDO

Similar to Palestra de PDO (20)

Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance
 
Programando em PHP com Estilo
Programando  em PHP com EstiloProgramando  em PHP com Estilo
Programando em PHP com Estilo
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 
apostila.pdf
apostila.pdfapostila.pdf
apostila.pdf
 
Palestra PHPSP+Locaweb 2014 - PDO
Palestra PHPSP+Locaweb 2014 - PDOPalestra PHPSP+Locaweb 2014 - PDO
Palestra PHPSP+Locaweb 2014 - PDO
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Fugindo das armadilhas do MVC
Fugindo das armadilhas do MVCFugindo das armadilhas do MVC
Fugindo das armadilhas do MVC
 
Bread board
Bread boardBread board
Bread board
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 

More from Almir Mendes

Software Livre, que história é essa?
Software Livre, que história é essa?Software Livre, que história é essa?
Software Livre, que história é essa?Almir Mendes
 
[Rock'n Rails] Deploying Rails Applications with Capistrano
[Rock'n Rails] Deploying Rails Applications with Capistrano[Rock'n Rails] Deploying Rails Applications with Capistrano
[Rock'n Rails] Deploying Rails Applications with CapistranoAlmir Mendes
 
Projeto Arduino - Hardware para fazer coisas legais - FOCAI
Projeto Arduino - Hardware para fazer coisas legais - FOCAIProjeto Arduino - Hardware para fazer coisas legais - FOCAI
Projeto Arduino - Hardware para fazer coisas legais - FOCAIAlmir Mendes
 
Palestra "Do PHP ao Rails" - FOCAI
Palestra "Do PHP ao Rails" - FOCAIPalestra "Do PHP ao Rails" - FOCAI
Palestra "Do PHP ao Rails" - FOCAIAlmir Mendes
 
Deploying Rails Applications with Capistrano
Deploying Rails Applications with CapistranoDeploying Rails Applications with Capistrano
Deploying Rails Applications with CapistranoAlmir Mendes
 
Palestra "Do PHP ao Rails"
Palestra "Do PHP ao Rails"Palestra "Do PHP ao Rails"
Palestra "Do PHP ao Rails"Almir Mendes
 
Arduino Project :: Giran Siege
Arduino Project :: Giran SiegeArduino Project :: Giran Siege
Arduino Project :: Giran SiegeAlmir Mendes
 
Integração contínua com Hudson CI
Integração contínua com Hudson CIIntegração contínua com Hudson CI
Integração contínua com Hudson CIAlmir Mendes
 
Palestra sobre AWK [Giran Siege]
Palestra sobre AWK [Giran Siege]Palestra sobre AWK [Giran Siege]
Palestra sobre AWK [Giran Siege]Almir Mendes
 
Distribuições Linux
Distribuições LinuxDistribuições Linux
Distribuições LinuxAlmir Mendes
 
Entendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoalEntendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoalAlmir Mendes
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em PhpAlmir Mendes
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesAlmir Mendes
 

More from Almir Mendes (15)

Software Livre, que história é essa?
Software Livre, que história é essa?Software Livre, que história é essa?
Software Livre, que história é essa?
 
[Rock'n Rails] Deploying Rails Applications with Capistrano
[Rock'n Rails] Deploying Rails Applications with Capistrano[Rock'n Rails] Deploying Rails Applications with Capistrano
[Rock'n Rails] Deploying Rails Applications with Capistrano
 
Projeto Arduino - Hardware para fazer coisas legais - FOCAI
Projeto Arduino - Hardware para fazer coisas legais - FOCAIProjeto Arduino - Hardware para fazer coisas legais - FOCAI
Projeto Arduino - Hardware para fazer coisas legais - FOCAI
 
Palestra "Do PHP ao Rails" - FOCAI
Palestra "Do PHP ao Rails" - FOCAIPalestra "Do PHP ao Rails" - FOCAI
Palestra "Do PHP ao Rails" - FOCAI
 
Deploying Rails Applications with Capistrano
Deploying Rails Applications with CapistranoDeploying Rails Applications with Capistrano
Deploying Rails Applications with Capistrano
 
Palestra "Do PHP ao Rails"
Palestra "Do PHP ao Rails"Palestra "Do PHP ao Rails"
Palestra "Do PHP ao Rails"
 
Arduino Project :: Giran Siege
Arduino Project :: Giran SiegeArduino Project :: Giran Siege
Arduino Project :: Giran Siege
 
Integração contínua com Hudson CI
Integração contínua com Hudson CIIntegração contínua com Hudson CI
Integração contínua com Hudson CI
 
Palestra sobre AWK [Giran Siege]
Palestra sobre AWK [Giran Siege]Palestra sobre AWK [Giran Siege]
Palestra sobre AWK [Giran Siege]
 
Palestra regex
Palestra regexPalestra regex
Palestra regex
 
Palestra regex
Palestra regexPalestra regex
Palestra regex
 
Distribuições Linux
Distribuições LinuxDistribuições Linux
Distribuições Linux
 
Entendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoalEntendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoal
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 

Palestra de PDO