Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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 conferir se sua instalação do PHP tem suporte a PDO e quais drivers da suporte
carregue um arquivo PHP com o código:
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.
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).
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.
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.
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.)
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
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.
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
extension=php_pdo_oci.dll "Oracle
extension=php_pdo_oci8.dll "Oracle 8
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,
Um abraço pessoal,
Léo
0 Comments
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
view source
print?
1 <?php
3
4 if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME)=='mysql'){
6 }
7 ?>
abaixo, são definidas pela extensão do PDO. Podem ser compilados junto ao PHP ou
0 Comments
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, é
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”
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
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
utilização de um único tipo de SGBD por aplicação, para que os recursos específicos sejam
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, é
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”
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
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.
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
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.
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
Para conectar ao banco de dados você tem que ter essa linha:
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
oci:mydb
oci:dbname=//localhost:1521/testdb
PDO_ODBC:
odbc:DSN=SAMPLE;UID=john;PWD=mypass
PDO_PGSQL(PostGreSQL):
PDO_SQLITE:
sqlite:/path/to/database
sqlite::memory:
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:
#:: a variavel $pdo contem agora algumas sintexe para podermos controlar o
banco de dados.
#:: 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
$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!