Desmistificando o PDO - PHP Data Object
O que é PDO?
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çã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.
Muito bom o Post, me ajudou muito.
Para exibir os resultados do while basta
$stmt = $pdo->query('SELECT nome, login FROM usuarios');
// Percorrento um resultset com while
while ($obj = $stmt->fetchObject()) {
$obj->nome; //campo que deseja exibir
}
Abraço!
Para exibir os resultados do while basta
$stmt = $pdo->query('SELECT nome, login FROM usuarios');
// Percorrento um resultset com while
while ($obj = $stmt->fetchObject()) {
$obj->nome; //campo que deseja exibir
}
Abraço!
23/11/2011 11:30am
(~5 meses atrás)
Olá, venho aqui recomendar, para quem se interessar o uso de uma classe PDO de conexão, a qual já venho utilizando. Possui um repositório no github para poder baixar e utilizar em suas aplicações, ou simplesmente acompanhar e/ou compartilhar.
Segue link: http://bitly.com/PDO4You
Sugestões ou críticas, sempre são bem vindas e ajudam a tornar esta classe ainda melhor para benefício de todos e assim seja até quando o PHP existir. =D
Abraços.
Segue link: http://bitly.com/PDO4You
Sugestões ou críticas, sempre são bem vindas e ajudam a tornar esta classe ainda melhor para benefício de todos e assim seja até quando o PHP existir. =D
Abraços.
30/07/2011 10:15pm
(~9 meses atrás)
Rubens, obrigado pela resposta. Pensei que dava pra fazer algo como isto, ou seja, selecionar quais colunas retornar da consulta, mas pelo jeito devo fazer isso de outra forma.
quando tento iterar o objeto PDOStatement aparece algo como:
array
'?' => string 'telefone' (length=8)
0 => string 'nome' (length=4)
1 => string 'endereco' (length=8)
2 => string 'telefone' (length=8)
quando tento iterar o objeto PDOStatement aparece algo como:
array
'?' => string 'telefone' (length=8)
0 => string 'nome' (length=4)
1 => string 'endereco' (length=8)
2 => string 'telefone' (length=8)
26/03/2011 12:58pm
(~1 ano atrás)
Jairo, na verdade se utiliza os pontos chave para valores variáveis, por exemplo, valores informados pelo usuário.
Prepared Statement inclui aspas quando o conteúdo é string, portanto, seria gerada uma SQL inválida, já que não se informa os campos desejados de um SELECT delimitados por aspas.
Correto:
Errado:
Prepared Statement inclui aspas quando o conteúdo é string, portanto, seria gerada uma SQL inválida, já que não se informa os campos desejados de um SELECT delimitados por aspas.
Correto:
SELECT nome FROM usuarios;
Errado:
SELECT 'nome' FROM usuarios;
23/03/2011 5:50pm
(~1 ano atrás)
Muito bom artigo
Usando dessa forma:
$statement = $pdo->prepare('select ?,?,? from pessoa');
$columns = array('nome', 'endereco', 'telefone');
$statement->execute($columns);
// depois ler o resultado do objeto $statement
deveria funcionar ou existe um jeito de funcionar?
Usando dessa forma:
$statement = $pdo->prepare('select ?,?,? from pessoa');
$columns = array('nome', 'endereco', 'telefone');
$statement->execute($columns);
// depois ler o resultado do objeto $statement
deveria funcionar ou existe um jeito de funcionar?
23/03/2011 4:46pm
(~1 ano atrás)
Bom artigo, parabéns
Será quem já tem alguém traduzindo no manual do PHP a parte do PDO?
Será quem já tem alguém traduzindo no manual do PHP a parte do PDO?
22/03/2010 10:23pm
(~2 anos atrás)
Parabéns pelo artigo Rubens, muito bem explicadiiinho, legal gostei mesmo.
18/02/2010 12:15am
(~2 anos atrás)



disse:
se nao for pedir demais aponte o certo e errado, corro riscos assim?
e utilizar return em um metodo e errado? {return self::metodo();}
final class Tools
{
private static $query;
final private static function sql($sql,$execute)
{self::$query=BD::conn()->prepare($sql);self::$query->execute($execute);}
final public function CUD($sql,$execute)
{self::sql($sql,$execute);return self::$query;}
}
grato desde já