Você está na página 1de 10

Extensão PDO php

Ao desenvolver sistemas em PHP sempre havia algo que preocupava a equipe de


desenvolvimento, a camada de acesso ao banco de dados na aplicação. Muitos optavam
em criar suas próprias classes onde tratavam fatores como conexão persistente, escape
das queries para evitar SQL injection, faziam o tratamento de erros ou de execução em
queries, preparação e verificação de tipos de dados em campos numéricos e datas etc.
Outros utilizavam PEAR DB, ou um outro dos excelentes pacotes PEAR ou uma outra
classe muito famosa, a ADOdb.

Porém cada uma dessas opções tinha seus prós e contras, como tudo, ofereciam método
de execução, fetch e tudo mais, porém havia necessidade de inclusão de arquivos de
configurações, e um certo custo na performance da aplicação. Agora com as versões 5.1
ou superiores do PHP há uma interface rápida, nativa e confiável para o acesso e
interação com bancos de dados. Com boas práticas de programação e uso da orientação
a objetos pode-se construir aplicações que funcionam em vários bancos com
praticamente sem esforço.

Apresentando a PDO

PDO é uma extensão do PHP que fornece uma interface rápida, segura e leve para
acesso e manipulação de banco de dados. Mais do que métodos para acesso a bancos,
execução de “queries” e “fetchs”. PDO também oferece controle de transações com
commit e rollback, e um item importante para a velocidade de produção do projeto, ao
invés de trabalhar com erros, pode-se trabalhar com exceções, o que torna menos
traumático “debugar” e tratar inconformidades de dados e outros erros. Uma informação
importante é que a PDO gera exceções de uma da classe PDOException, portanto deve-
se utilizar catch (PDOException $e) para capturar as exceções.

Instalação

A instalação do PDO é muito simples, e na maioria das distribuições ao instalar o PHP


5.2.x PDO já é instalado automaticamente.

PDO trabalha com o auxílio de drivers para conexão com os banco de dados, portanto
deve-se instalar os drivers PDO para os bancos do qual se pretende trabalhar. Há drivers
para a maioria dos bancos como MySQL, PostgreSQL, Oracle e ainda a possibilidade
de conectar usando ODBC.

Para instalar o PDO basta instalar os pacotes php-pdo e php-pdo_mysql, php-pdo_pgsql


ou php-pdo_banco.

Utilizando sua ferramenta de gerenciamento de pacotes yum, urpmi, apt-get.

Para conferir se sua instalação do PHP tem suporte a PDO e quais drivers da suporte
carregue um arquivo PHP com o código:

Conetando e executando queries

Conectando-se a bases de dados


Para conexão com a base de dados são necessários os parâmetros básicos, host, usuário,
senha, nome do banco etc. Isto tanto para MySQL, PostgreSQL ou outros bancos.

A conexão se dá pela instância da classe PDO. Passando para seu __construct os


parâmetros necessários para a conexão. Ex:

view sourceprint?
1.try {
2.$db = new PDO("pgsql:host=localhost dbname=sistema user=postgres
password=bananaamassada");
3.} catch (PDOException $e) {
4.print $e->getMessage();
5.}

A partir de agora a variável $db é um objeto PDO, e através dele pode-se executar
vários métodos, trabalhar com transações, preparar e executar “queries”, modificar
alguns atributos da classe etc.

Um recurso muito interessante e útil da PDO é o tratamento de exceções, dessa forma a


classe não retorna erros, mas sim gera exceções que são muito mais fáceis para tratar e
debugar, para isto use o método setAttribute() para alterar o atributo
PDO::ATTR_ERRMODE, que é a forma como a PDO vai trabalhar com os erros, o
valor para esse atributo pode ser PDO::ERRMODE_EXCEPTION, que faz a PDO
trabalhar com exceções como descrito acima:

view sourceprint?
1.$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Também é possível trabalhar com conexões persistentes junto ao banco de dados. Para
isto o atributo PDO::ATTR_PERSISTENT deve ser true, pode-se utilizar o atributo
direto como parâmetro no momento da conexão ou utilizando o método setAttribute.

view sourceprint?
1.$db->setAttribute(PDO::ATTR_PERSISTENT,true);

Executando query

Uma vez conectado a base de dados podemos utilizar alguns dos métodos da PDO para
executar nossas “queries”, o próprio método “query” pode ser utilizado, porém opções
como prepare e execute tornam seu uso muito mais flexível e inteligente.

A execução de uma query vai retornar um outro objeto o Statement. Objetos Statements
são o resultado da execução ou da preparação para execução de uma query e provêem
vários métodos para obter-se informações sobre a query e sua execução. Métodos para
“fetch”, pegar informações sobre as colunas, linhas entre outros. Recursos semelhantes
com os que utiliza-se nas funções nativas mysql nas quais um resultset é passado como
parâmetro, ex: mysql_num_rows($resultset).

Dando poder a suas queries


Normalmente a arte de compor queries exige um esforço grande em concatenar e
“escapar” strings, formatar valores de acordo com o tipo do campo entre outros. Ex:

view sourceprint?
01.$sql="INSERT INTO produtos
(produ_nome,grupo_id,categ_id,produ_detalhe,produ_fotos) VALUES ( ".
addslashes("Teclado ABNT2 mobil 'T"
)".",'2','1',addslashes($detalhe),"tec.png")";
02.$rs = $db->query($sql);
03.
04.Recuperando dados
05.
06.Com a técnica acima também facilita-se muito na recuperação de
dados, uma vez que não há a necessidade de verificar tipos de dados
escapes etc. Ex:
07.[sourcecode='php']
08.$sql = "SELECT * FROM produtos WHERE produ_id = ?";
09.try {
10.$res = $db->prepare($sql);
11.$res->execute(array($produ_id));
12.} catch ( PDOException $e) {
13.print "Erro: Código:" . $e->getCode() . "Mensagem" . $e-
>getMessage();
14.}

Nesse caso $res é um objeto da classe Statement com métodos e atributos. Na maioria
dos casos esse tipo de objeto nos desperta apenas alguns interesses, os dados retornados,
o número de linhas e as colunas retornados.

Para acessar os dados retornados podemos utilizar o método fetch, fetchObjetc ou


fetchAll. O método fetch retorna a linha ativa do statement na forma de um array onde
os valores podem ser acessados pelo número da coluna iniciando em 0 (zero) ou o nome
da coluna.

Um método muito poderoso é o fetchAll, que retorna um array indexado de 0 ao


número de linhas retornadas, e cada item desse array é um outro array exatamente como
o retornado pelo método fetch.

Enquanto que fetchObject retorna um objeto com a linha ativa do resultset tendo as
colunas como propriedades.

Uma observação importante é que pode-se modificar o tipo de retorno dos métodos
fetch e fetchAll passando o tipo de “fetch” desejado na chamada do método ou
utilizando o método setFetchMode do statement.

Os valores mais utilizados são:

* PDO::FETCH_ASSOC – Faz com que seja retornada a linha ativa do resultset na


forma de um array indexado pelas colunas retornadas;
* PDO::FETCH_OBJ – Faz com que o retorno seja um objeto como o retornado em
fetchObject.
Ainda existem outros métodos de fetch que podem ser utilizados, o
PDO::FETCH_BOUND cria variáveis no PHP com os nomes da colunas da linha atual
do resultset e PDO::FETCH_BOTH, que é o padrão de “fetch” do statements que
retorna a linha atual como descrito no método fetch. Ex.:

view sourceprint?
01.$dado = $res->fetch(PDO::FETCH_ASSOC);
02.print_r($dado);
03.saida
04.Array(
05.[produ_id] => 1
06.[produ_nome] =>Teclado ABNT2 mbil 'T
07.[grupo_id] => 2
08.[categ_id] =>1
09.[produ_detalhe] =>teclado ergométrico
10.[produ_foto] =>tec.png
11.)

PHP Data Object – Instalação


4 de junho de 2010

Podemos observar que o PDO não precisa de nenhuma library (biblioteca) de elementos

acoplados ao PHP 5 para funcionar, pois vem nativa a linguagem. Vamos continuar

traduzindo a instalação direto do site php.net

Instalação

O PDO e o driver para o SQLLite chamado PDO_SQLITE são habilitados por padrão na versão

5.1.0 do PHP. Você precisará habilitar o driver do PDO do seu banco de dados. Para saber

mais sobre o driver do seu banco de dados, consulte a documentação deste a fim de achar o

driver correto, etc. Todos os drivers do PDO devem ser carregados depois da instalação do

Driver PDO em si, isso se a extensão do PDO for compartilhada. Veja no link Detalhes da

instalação em inglês.

Quando você instalar o PDO como um modulo compartilhado, o arquivo do PHP de

configuração, chamado PHP.ini precisará ser atualizado para que a extensão do PDO seja

carregada automaticamente quando o PHP for executado (iniciado). Você então precisará

habilitar qualquer driver especifico também. Veja se ele esta listado no arquivo php.ini na

linha dos Drivers de banco, como exemplo abaixo:

extension=php_pdo.dll " O PDO tem q esta habilitado primeiro!

extension=php_pdo_firebird.dll " Aqui a extensão do DB Firebird


extension=php_pdo_informix.dll " Informix

extension=php_pdo_mssql.dll "Sql Server

extension=php_pdo_mysql.dll " MySQL

extension=php_pdo_oci.dll "Oracle

extension=php_pdo_oci8.dll "Oracle 8

extension=php_pdo_odbc.dll " Conexão a outros banco.

extension=php_pdo_pgsql.dll "PostgreSQL

extension=php_pdo_sqlite.dll

Com o PDO você seleciona qualquer banco de dados que esteja habilitado no arquivo PHP.ini,

como nas linhas acima.

Um abraço pessoal,

Léo

0 Comments

PHP Data Object – Configuração e constantes


16 de abril de 2010

Bom, agora vamos ver como a gente pode “configurar”, dá uma de joão bobo a gente poderá

mudar configuração do nosso PDO somente no PHP.ini. Porém não como um init_set da vida

no PHP! No site do PHP.net não cobre muito essas configurações.. Vamos continuar ae

com a explicações.

Vamos ver as constantes do PDO para usarmos em nossos programas. Vou colocar um

exemplo, na seqüência você poderá modificar como achar melhor.

view source

print?

1 <?php

2 $pdo = new PDO("mysql:host=localhost; dbname=nome","username","passuser");

3
4 if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME)=='mysql'){

5 echo "O Driver do banco é para MySQL!" ;

6 }

7 ?>

A gente, na realidade, vai utilizando os métodos da instância PDO(), ae é só utilizar os tais

que nesse exemplo é o método PDO::ATTR_DRIVER_NAME. As constantes que iremos ver

abaixo, são definidas pela extensão do PDO. Podem ser compilados junto ao PHP ou

dinamicamente carregados em tempo de execução. Veja os atributos no site do PHP ou

Atributos do PDO com a descrição de todos esses métodos.

Criei uma comunidade no Orkut para essa extensão

0 Comments

PHP Data Objetct


15 de abril de 2010

PDO (PHP Data Objects) é um módulo de PHP montado sob o paradigma Orientado a Objetos

e cujo objetivo é prover uma padronização da forma com que PHP se comunica com um

banco de dados relacional. Este módulo surgiu a partir da versão 5 de PHP. PDO, portanto, é

uma interface que define um conjunto de classes e a assinatura dos métodos de

comunicação com uma base de dados.

Cada sistema gerenciador de bancos de dados (SGBD) pode prover um driver para PDO.

Apesar de PDO definir a assinatura dos métodos que cada driver deve implementar, alguns

recursos podem não ser suportados. Logo, a chamada a um método pode ser “inútil”

dependendo do driver utilizado ou da versão/modelo do servidor de Banco de Dados. Por

exemplo, algumas engines do SGBD MySQL não dão suporte a transações, logo, o método

“beginTransaction” (responsável por iniciar uma transação) simplesmente não terá efeito sob

tais condições.

Ao contrário do que algumas pessoas pensam, PDO não é uma camada de abstração de SQL.

Cada SGBD relacional possui uma sintaxe própria para construção de SQL. Embora muitos

deles se aproximem da especificação da SQL-92, algumas diferenças existem. Portanto, usar

PDO não significa que seu sistema será portável entre diferentes SGBDs. Significa apenas

que você se comunicará com uma base de dados através de um conjunto determinado de

métodos e classes.

Observação
Criar uma camada da aplicação para abstração de SQL é extremamente complexo. Várias

variáveis devem ser levadas em conta e, possivelmente, é preciso abrir mão de muitos

recuros específicos. Portanto, existem duas linhas de desenvolvimento: uma defende a

utilização de um único tipo de SGBD por aplicação, para que os recursos específicos sejam

utilizados ao máximo e de forma otimizada, enquanto outra defende a generalização e o

suporte a diferentes bases de dados, tornando o sistema mais portável. Tudo depende do

objetivo da aplicação.

PDO (PHP Data Objects) é um módulo de PHP montado sob o paradigma Orientado a Objetos

e cujo objetivo é prover uma padronização da forma com que PHP se comunica com um

banco de dados relacional. Este módulo surgiu a partir da versão 5 de PHP. PDO, portanto, é

uma interface que define um conjunto de classes e a assinatura dos métodos de

comunicação com uma base de dados.

Cada sistema gerenciador de bancos de dados (SGBD) pode prover um driver para PDO.

Apesar de PDO definir a assinatura dos métodos que cada driver deve implementar, alguns

recursos podem não ser suportados. Logo, a chamada a um método pode ser “inútil”

dependendo do driver utilizado ou da versão/modelo do servidor de Banco de Dados. Por

exemplo, algumas engines do SGBD MySQL não dão suporte a transações, logo, o método

“beginTransaction” (responsável por iniciar uma transação) simplesmente não terá efeito sob

tais condições.

Ao contrário do que algumas pessoas pensam, PDO não é uma camada de abstração de SQL.

Cada SGBD relacional possui uma sintaxe própria para construção de SQL. Embora muitos

deles se aproximem da especificação da SQL-92, algumas diferenças existem. Portanto, usar

PDO não significa que seu sistema será portável entre diferentes SGBDs. Significa apenas

que você se comunicará com uma base de dados através de um conjunto determinado de

métodos e classes.

ObservaçãoCriar uma camada da aplicação para abstração de SQL é extremamente

complexo. Várias variáveis devem ser levadas em conta e, possivelmente, é preciso abrir

mão de muitos recuros específicos. Portanto, existem duas linhas de desenvolvimento: uma

defende a utilização de um único tipo de SGBD por aplicação, para que os recursos

específicos sejam utilizados ao máximo e de forma otimizada, enquanto outra defende a

generalização e o suporte a diferentes bases de dados, tornando o sistema mais portável.

Tudo depende do objetivo da aplicação.

The PHP Data Objects é uma extenção que vem no PHP 5 para você ter um controle dos
banco de dados, como por exemplo o ADODB, em que você controla vários banco de
dados somente mudando uma linha de comando. Com o PDO é a mesma coisa.

Para funcionar o PDO habilite a DLL no php.ini exemplo:


extension=php_pdo.dll

E para o banco que for usar:

extension=php_pdo_firebird.dll

extension=php_pdo_mssql.dll

extension=php_pdo_mysql.dll

extension=php_pdo_oci.dll

extension=php_pdo_oci8.dll

extension=php_pdo_odbc.dll

extension=php_pdo_pgsql.dll

extension=php_pdo_sqlite.dll

Bem, vamos lá!

Como conectamos ao um banco de dados pelo PDO?

Para conectar ao banco de dados você tem que ter essa linha:

$pdo = new PDO("tipo_de_banco_de_dados;


dbname=nome_do_banco_de_dados", "usuario", "senha");

Com isso você já vai se conectar ao banco de dados: segue a lista para como se
conectar ao bancos suportados:

PDO_DBLIB:

sybase:host=localhost; dbname=testdb

mssql:host=localhost; dbname=testdb

PDO_FIREBIRD:

firebird:User=john;Password=mypass;Database=DATABASE.GDE;DataSource=l
ocalhost;Port=3050
PDO_MYSQL:

mysql:host=localhost;dbname=testdb

PDO_OCI

Para conectar via tnsnames.ora, use:

oci:mydb

Se tiver usando instantclient, use:

oci:dbname=//localhost:1521/testdb

PDO_ODBC:

odbc:DSN=SAMPLE;UID=john;PWD=mypass

DSN=SAMPLE referece ao caminho patch onde está o drive ODBC manager.

PDO_PGSQL(PostGreSQL):

pgsql:host=localhost port=5432 dbname=testdb user=john password=mypass

PDO_SQLITE:

sqlite:/path/to/database

Para criar a data base na memória, use:

sqlite::memory:

Bem vamos fazer aqui uma conexão ao banco de dados MySQL:

#:: conectando ao mysql

$pdo = new PDO("mysql:host=localhost; dbname=banco", "usuario", "senha");

Depois de eu ter feito a conexão ao MySQL eu já informei qual banco ele deve fazer a
pesquisa agora vamos a brincadeira...
Vamos criar uma seleção de usuário:

#:: conectando ao mysql

$pdo = new PDO("mysql:host=localhost; dbname=banco", "usuario", "senha");

#:: a variavel $pdo contem agora algumas sintexe para podermos controlar o
banco de dados.

#:: vamos criar uma seleção de usuario:

$stmt = $pdo->prepare("select * from usuarios"); // ele prepara uma sintaze sql


para ser executada com parametros e a variavel $stmt ela irá receber algumas
funções extras. veja aseguir.

#:: aqui estamos executando o comando SQL que haviamos feito logo acima

$stmt->execute();

#:: apos ter feito esse comando como o nosso PDO é uma classe então essa
variavel $smtmt ja contem varios resultados sobre o nosso comando

#:: agora vamos criar um laço para pegar as info do banco de dados

while ($row = $stmt->fetch()) // lembra o mysql_fetch_array() no pdo ele está


sendo representado como fetch

$nome = $row['nome'];

echo $nome;

Agora nós já temos nossa primeira consulta via PDO, agora faça um teste, troque
somente a primeira linha "$pdo = new PDO("mysql:host=localhost; dbname=banco",
"usuario", "senha");" para outro banco de dados e você verá que ele busca da mesma
maneira somente mudando essa linha com isso você pode crir sistema para vários
banco de dados!

Você também pode gostar