Curso de PHP Orientado a Objetos – Parte 12
Décimo segundo artigo do curso de PHP Orientado a Objetos. Dessa vez, estudaremos o PDO (PHP Data Object).
Vamos iniciar o décimo segundo e último artigo do curso de PHP Orientado a Objetos.
Para conhecer as demais partes, clique aqui.
Ao final deste artigo, você será capaz de:
Conhecer e utilizar um módulo OO (PDO) para acesso a Banco de Dados.
Conhecendo o PDO
PDO (PHP Data Objects). Trata-se de um módulo PHP construído sob o paradigma Orientado a Objetos que fornece uma padronização da forma com que o PHP se comunica com o banco de dados relacional. PDO, portanto, é uma interface que define um conjunto de classes e a assinatura de métodos de comunicação com uma base de dados.
Muitos confundem PDO com uma biblioteca de abstração de acesso à base de dados, o que não é verdade, visto que ela não faz a leitura e tradução das instruções SQL, adaptando-as aos mais diversos drivers de banco de dados existentes. 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. Dito isso, podemos concluir que utilizar o PDO não significa que seu sistema será portável entre diferentes SGBD’s. Ela simplesmente unifica a chamada de métodos, delegando-os para as suas extensões correspondentes e faz uso do que há de mais recente no que diz respeito à orientação a objetos presente no PHP5.
Utilizando o PDO
Para utilizar o PDO, primeiro é instanciado um objeto da classe PDO, que representa a conexão com o banco. No construtor da classe, passamos os parâmetros necessários. Cada driver PDO especifica uma forma de como é montado o chamado “DNS”, que é uma string de conexão para o SGBD correspondente. Além do DNS, também é informado, por parâmetro, o usuário, a senha de acesso e algumas opções adicionais.
Para exemplo vamos criar alguns exemplos de DNS para o Mysql, PostgreSQL, SQLite e Firebird:
1 2 3 |
new PDO('sqlite:teste.db'); new PDO("firebird:dbname=c:\banco.GDB", "SYSDBA", "masterkey"); new PDO("pgsql:dbname=exemplo;user=user;password=senha;host=localhost"); |
Agora vamos ao exemplo completo utilizando o MySql e PDO
Para os exemplos descritos a seguir, criaremos uma tabela chamada alunos:
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE IF NOT EXISTS alunos ( id int(10) NOT NULL AUTO_INCREMENT, nome varchar(65) NOT NULL, idade int(3) NOT NULL, sexo char(1) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT = 1; INSERT INTO alunos (nome,idade,sexo) VALUES ('Leandro',27,'M'),('João',24,'M'),('Flavia',19,'F'),('Maria',27,'F'); |
Com a tabela criada, e os 4 registros inseridos, vamos criar a conexão e realizar uma seleção:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Conexão PDO com um banco de dados MySQL local $dsn = 'mysql:host=localhost;port=3306;dbname=phpoo'; $usuario = 'root'; $senha = ''; $opcoes = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_CASE => PDO::CASE_LOWER ); try { $pdo = new PDO($dsn, $usuario, $senha, $opcoes); } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } $aluno = $pdo->query('SELECT nome, idade FROM alunos'); // Percorrendo sobre o resultado da Query while ($obj = $aluno->fetchObject()) { echo "<strong>Nome:</strong> " . $obj->nome . " "; echo "<strong>Idade:</strong> " . $obj->idade . " < br />"; } |
Resultado:
Nome: Leandro
Idade: 27
Nome: João
Idade: 24
Nome: Flavia
Idade: 19
Nome: Maria
Idade: 27
Prepared Statements
Está é uma funcionalidade interessante que ameniza muitos erros. Com o uso dos prepared statements não há necessidade de concatenar várias variáveis e usar escape de aspas para prover segurança, uma vez que este método é considerado um dos mais seguros se tratando de segurança contra SQL injection.
Se segurança não é um motivo que te convence, utilizando Prepared Statements temos uma melhora significativa em temos de performance na execução das query’s.
Para utilizar esta funcionalidade, basta colocarmos os valores no array que será passado por parâmetro para o método execute.
Vamos ao exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Conexão PDO com um banco de dados MySQL local $dsn = 'mysql:host=localhost;port=3306;dbname=phpoo'; $usuario = 'root'; $senha = ''; $opcoes = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_CASE => PDO::CASE_LOWER ); try { $pdo = new PDO($dsn, $usuario, $senha, $opcoes); } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } // Usando "?" nos pontos-chave $aluno = $pdo->prepare('SELECT * FROM alunos WHERE id=?'); // Passando o valor a ser usado no "?" $dados = array(2); $resultado = $aluno->execute($dados); // Escrevendo o resultado da consulta $obj = $aluno->fetchObject(); echo "<strong>Nome:</strong> " . $obj->nome . "< br />"; echo "<strong>Idade:</strong> " . $obj->idade . "< br />< br />"; |
Resultado:
Nome: João
Idade: 24
De acordo com o que foi comentado anteriormente, o uso de Prepared Statements deixa nossa consulta muito mais rápida, visto que a mesma fica previamente “compilada” e pronta para execução com os novos valores. Ao invés do SGBD interpretar toda a SQL, ele apenas atribui novos valores aos pontos chave e realiza a operação.
Existem outras formas para o uso de Prepared Statements, vamos conhecer mais uma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// Conexão PDO com um banco de dados MySQL local $dsn = 'mysql:host=localhost;port=3306;dbname=phpoo'; $usuario = 'root'; $senha = ''; $opcoes = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_CASE => PDO::CASE_LOWER ); try { $pdo = new PDO($dsn, $usuario, $senha, $opcoes); } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } // Usando pontos-chave nomeados $aluno = $pdo->prepare('SELECT * FROM alunos WHERE nome=:nome AND sexo=:sexo'); // Passando os valores a serem usados em :nome e :sexo $dados = array(':nome' => 'Flavia', ':sexo' => 'F'); $resultado = $aluno->execute($dados); // Escrevendo o resultado da consulta $obj = $aluno->fetchObject(); echo "<strong>Nome:</strong> " . $obj->nome . "< br />"; echo "<strong>Idade:</strong> " . $obj->idade . "< br />< br />"; |
Resultado:
Nome: Flavia
Idade: 19
PDO fetch()
É possível retornar dados de uma consulta de diversas formas, uma delas é fazendo uso da função fetch(). Ela aceita diversos parâmetros:
- PDO::FETCH_ASSOC – Retorna um array indexado pelo nome da coluna;
- PDO::FETCH_NUM – Retorna um array indexado pela posição numérica da coluna;
- PDO::FETCH_BOTH – Retorna um array indexado pelo nome e pela posição numérica da coluna;
- PDO::FETCH_OBJ – Retorna um objeto anônimo (stdClass) onde cada coluna é acessada como se fosse uma propriedade.
Vamos ao exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// Conexão PDO com um banco de dados MySQL local $dsn = 'mysql:host=localhost;port=3306;dbname=phpoo'; $usuario = 'root'; $senha = ''; $opcoes = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_CASE => PDO::CASE_LOWER ); try { $pdo = new PDO($dsn, $usuario, $senha, $opcoes); } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } // Resgatando todos os registros $aluno = $pdo->query('SELECT * FROM alunos'); // Exibindo com PDO::FETCH_ASSOC while( $row = $aluno->fetch(PDO::FETCH_ASSOC) ){ echo "<strong>Nome:</strong> " . $row['nome'] . " "; echo "<strong>Sexo:</strong>" . $row['sexo'] . " "; } |
Conclusão:
Não vamos abordar aqui todas as funcionalidades do PDO. Lembre-se que a biblioteca PDO é: Segura, rápida, consistente e prática. Você deve fazer uso e se aperfeiçoar. Para maiores informações clique aqui.
Chegamos ao final do nosso curso. Foram 12 artigos abordando tudo aquilo que julgo necessário para começar no mundo OO. Tentei dar ênfase nos pontos que geram maior dúvida. Agora, cabe a você fazer uso do que aprendeu, não desanime, no início, deixar o paradigma estruturado pode ser difícil, mas no futuro você perceberá que valeu a pena. Não é em um mês que você se tornará um expert. Novidades aparecerão, então continue estudando com afinco e pratique bastante.
Recomendo que você aprenda um bom Framework. Isso vai te fornecer versatilidade, além de ser uma exigência do mercado. Basicamente a idéia por trás de um framework está ligada ao modelo MVC (Model View Controller). De forma geral, o que ele faz é isolar a programação, lógica de negócio e a camada de exibição.
Pretendo escrever algo sobre frameworks em breve. Por isso, visite o site para se manter informado.
Não se esqueça de comentar a respeito do curso. Isso é muito importante.
Abraços.
Gostei muito!
só acho q a próximo tópico póderia ser o dev de uma pequena aplicacão como por exemplo um mini blog ou site! Só para nós termos uma idéia dos conceitos básicos de que um sistema como um blog necessita pra ser funcional segundo o paradigma da OO!
Olá Fabiano. Muito obrigado pelo comentário. vou providenciar uma aula prática a respeito do tema em breve.
Concordo com o Fabio, seria bom a gente ver o código em uma “aplicação real”,
gosto muito de seus cursos, Parabéns !
Concordo com o fabiano! =D
Excelente curso a propósito, agora se tem um material de qualidade na internet sobre esse assunto! Vlws!
Olá Hugo. Muito obrigado pelo comentário. Espero ter ajudado. Abraços.
Pow, parabéns pelas sequência de postagens, são muito boas!
Parabéns mesmo! ^^ ;DD
Muito obrigado pelo comentário Julio. Fico feliz em ter ajudado.
Simplesmente show de bola o curso! Acompanhei todos os 12 artigos, e agora é praticar pra melhorar o máximo possível. No aguardo do curso de JQuery! Muito obrigado!
Parabéns! As informações foram muito úteis, dando uma visão macro da oo..Abrç
Obrigado pelo comentário Cézar. Fico feliz em ter ajudado.
Parabéns, ótimas abordagens de OOP
Obrigado. Abraços.
Posso fazer uma conexão PDO a um banco dedos Oracle? Como seria?
Artigos excelentes! Parabéns!
Acredito que sim. Veja: http://www.php.net/manual/pt_BR/ref.pdo-oci.connection.php
Muito bom cara!
Parabéns e obrigado pela colaboração!!
Abs!
Oi Waister. Obrigado pelo comentário. Espeto ter ajudado.
Li os 12 artigos.
Muito bom, obrigado.
Obrigado. Espero ter ajudado.
Simplesmente incrivel, muito bem explicado é sem dúvida um material que agradará a todos que querem aprender de verdade.
Parabéns.
Olá Marcos. Obrigado pelo comentário. Fico feliz por ter ajudado.
Muito boa a sua didatica, e o curso acrescentou muito no meu aprendizado de OO
Muito obrigado mesmo!
Olá Rodrigo. Obrigado pelo comentário. Fico feliz por ter ajudado.
Quero agradecer pelo tutorial divulgado.
Só uma pergunta: qual Framework que indicaria ?
Olá Anderon. Muito obrigado pelo comentário.
Framework sempre gera discussão por se tratar mais de uma opção de caráter pessoal. Particularmente, considero o CodeIginiter um dos melhores frameworks do mercado. Principalmente pelo vasto material disponível na web.
Abraços.
Fala Leandro blz!
Quando terá novas aulas oop e iniciara o curso jquery ?
As aulas estão ótimas, parabéns pelo bom trabalho!
Olá Adriano. Obrigado pelo comentário. Estou um pouco sem tempo para publicar novas aulas, já tenho algumas prontas mas precisa passar por uma revisão. Em breve termos novidades.
muito bom Leandro, esse curso está entre os melhores que encontrei até agora, vai me ajudar muito no meu tcc, obrigado e parabéns pela iniciativa!
Eu voto pelo Jquery no próximo curso
Muito obrigado pelo comentário. Espero ter ajudado. Abraços.
I’m not easily imsrspeed. . . but that’s impressing me!
Muito bom o curso. Parabéns pela dedicação e pelo trabalho.
Obrigado Cézar. Espero ter ajudado.
Obrigado, salvou a pátria, excelente resumo, de consulta rápida, compreensivo e abrangente.
Pelo pouco tamanho, é um dos melhores materiais que estudei de PHP nestes 10 anos.
Arnaldo. Muito obrigado pelo comentário. Isso realmente motiva a escrever novos artigos. Fico feliz que tenha ajudado.
Parábens! pela brilhante iniciativa.
Estou iniciando com o PHP e pretendo seguir adiante.
E são atitudes como estas que ajudam as pessoas.
Muito obrigado.
Obrigado pelo comentário Ricardo. Fico feliz em ter ajudado.
Otimo curso Leandro, aprendi muita coisa aqui,
Tu podia escrever sobre a biblioteca cURL, ja li varioas artigos por ai, mais não vão muito a fundo,
vlw cara muito obrigado
Esse post sobre PDO é um dos melhores que tem na comunidade parabéns e continue com o trabalho de sucesso!
Muito bom e rápido o curso!
Sugestão:
Fazer um curso de PHP5 com MVC. Você poderia propor uma pequena aplicação que abordasse esses conceitos.
Abraço
Foi um Curso excelente ! Muito bom mesmo !
Também estou começando no PHP e as informações
contidas nesse curso estão muito claras.
Obrigado por nos dar essa oportunidade de
aprendizado. Valew
Leandro, parabéns pelo curso! Sua didática é muito boa, muito simples de entender OO.
Mesmo já tendo conhecimento, li todos os posts consegui tirar de vez algumas dúvidas, relembrar conceitos e práticas. Muito bom!
Minha sugestão é fazer um breve curso ensinando sobre MVC e um framework, como o Codeigniter, como você mesmo sugeriu nos comentários acima.
Em relação a templates PHP, você tem alguma sugestão? Já li sobre o Smarty, mas vi várias pessoas dizendo que no final das contas uma aplicação desenvolvida com smarty acaba não separando o HTML do PHP. O que me sugere?
Abs.
Parabéns! sensacional
Posso dizer que estes artigos foram meu presente de Natal! rsrsrsr
Ótimo curso, muito bem estruturado e explicado, para um melhor entendimento do paradigma orientado a objetos. Parabéns.
Leandro, ao estudar PDO, percebi que muitos autores utilizam os metodos “bindValue()” e “bindParam”, qual seria a utilidade de usar os mesmos?
Leandro, suas aulas são excelentes… porém não estão finalizados. Tens alguma previsão para continuar a publicar novos artigos ? Ou fecha o curso por aqui mesmo !? Vlw pelas aulas anteriores, muito boas !
Ótimo curso!!!! Parabéns!!!!
Parabéns Leandro! excelente conteúdo.
Todos nós somos privilegiados por ter um conteúdo de Excelência.
Parabéns, espero mais aulas principalmente de PDO..
meu caro olha estou muito agradecido pelo material que forneceste no teu blog e achei muito mais do que a palavra fixe, realmente tens o dom da palavra, continua assim que vais longe
finalmente encontrei um site que tem tudo explicado de uma forma clara, muito bom mesmo
obrigado por compartilhar seus conhecimentos .
Olá , quero agradecer pela disponibilidade de vc ter reservado um tempo para, compartilhar seu conhecimento de uma forma didatica, pois finalmente encontrei um site na net para ter como referencia , aprendi muito com vc.
Sucesso ao site!
Parabéns pela nobre iniciativa e pela simples e clara forma de apresentar o conteúdo.
Foi, com toda certeza, um estudo que me acrescentou muito conhecimento e me ajudou a solidificar certos assuntos.
Parabéns Leandro,
Foi o melhor material sobre oo que encontrei na net, esta ajudando muitas pessoas, simplificando as coisas bem mais fácil que estudar o manual do php, espero que consiga um bom patrocínio p/ que possa ter mais tempo e continuar nos ajudando.
Muito obrigado por tudo cara! Aprendi bastante com seus artigos! Em relação ao Framework, seria interessante você nos ensinar a usar o Kohana que foi originalmente criado como um fork do framework PHP CodeIgniter. Abraços!
Chegamos ao fim.
Excelente material. Aprendi muito, e me deixou mais encantado com o php.
Aguardamos os próximos… vamos lá amigão, sua legião de fãs está ansiosa.
Sucesso!!!
Gostei
Gostei bastante da série de posts. Usei para estudar alguns aspectos de POO em PHP que estavam enferrujados. Estou recomendando para quem me pergunta por onde começar, parabéns.
Olá, Leandro. Você escreveu isto em abril de 2012 e hoje, em maio de 2014, suas aulas e metodologias continuam salvando vidas. rs.
Gostei muito do curso, fiz as 12 aulas e pratiquei seus exemplos.
Quero agradecer pelo empenho e pelo modo como fez simples, conceitos que meus professores tornaram tão complexos e monstruosos. Hoje penso que se eu tivesse tido acesso ao seu material, seria uma programadora melhor em OO. Mas enfim, agora é bola pra frente.
Obrigada mesmo e desejo tudo de bom para você.
Que tal criarmos um site (colaborativo), tipo alguém que curta CSS fica encarregado do CSS, quem curte Banco de Dados, cuidar do banco de dados… do PHP, cuidar do PHP….
Poderíamos através deste, checar as prioridades/interesses de aprendizado e com base nisso poderíamos criar o site.
Postei hoje cedo (via contato), meu interesse em aprender a criar Galerias com PHP Orientado a Objetos. Vi em alguns videos no Youtube, que usam a jQuery e outros plugins… minha ideia é ter um option (combobox) onde eu possa escolher o plugin e aplicar o efeito na galeria de fotos….
Uma das minhas dúvidas é em adaptar as aulas das galerias (mostrado em sua maioria em PHP Estruturado) para PHP Orientado a Objetos.
Escolher o plugin e adaptar o CSS…
Deixando sempre bonito no site.
Olá,
Gostei muito do seu curso, já havia visto outros com vídeo-aulas, mas não consegui assimilar o tanto que assimilei com o seu, apesar de por só leitura e exemplos, a linguagem usada é bem dinâmica e de fácil compreensão até para os menos experientes em programação PHP. Parabéns e continue assim, sempre contribuindo com excelentes cursos.
prepare($query);
$stmt->bindValue (“:id”, $_GET['id'] ,PDO::PARAM_INT); #ERRO NESSA LINHA————–
$stmt->execute();
print_r($stmt->fetch(PDO::FETCH_ASSOC));
}
catch(\PDOException $x){
echo”noa foi possivel conectar ao banco de dados”.$x->getCode();
}
?>