Extensão PDO php
Click here to load reader
-
Upload
elton-ferreira -
Category
Documents
-
view
721 -
download
1
description
Transcript of Extensão PDO php
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 source print ? 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 source print ? 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 source print ? 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 source print ? 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 source print ? 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=localhost;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!