Nas versões anteriores do PHP (sobretudo a 4), as funções para acesso ao BD eram distintas para cada SGBD, não permitindo a portabilidade do código realizado.
A partir da versão 5 do PHP, PDO foi adicionado ao núcleo do sistema.
PDO é uma classe para trabalhar com banco
de dados no PHP de forma orientada a
objetos.
Dentre os principais benefícios em utilizar PDO podemos citar:
◦ PDO vem compilado no núcleo do PHP e portanto é bem mais rápido do que uma classe para trabalhar com banco de dados comum
◦ PDO possui uma camada de abstração para trabalhar com banco de dados distintos, o que te permite executar comandos e trabalhar com o retorno dos dados do banco de forma semelhante para qualquer banco de dados suportado.
◦ Como trata-se de uma classe, você pode criar suas próprias
classes abarcando todo o recurso que PDO já possui graças
a herança que a programação OO nos oferece.
Para conectar com o banco de dados, quando você
instancia a classe PDO em um dado objeto, você
deve passar os parâmetros necessários.
A forma mais simples de executar um comando ou
consulta é utilizar o método query do PDO.
O método fetch permite você escolher o formato que os dados irão retornar, no nosso caso foi passado como parâmetro PDO::FETCH_ASSOC, o que retorna um array com o nome das colunas como índice.
Outras opções são:
◦ PDO::FETCH_NAMED – praticamente igual ao FETCH_ASSOC, com a diferença de que caso existam colunas com mesmo nome no retorno da consulta SQL, FETCH_NAMED irá juntar os valores das duas ou mais colunas num único array.
◦ PDO::FETCH_FUNC – Permite você passar uma função que
irá interagir com os valores das colunas. Os valores das
colunas são passados à função como parâmetros.
PDO::FETCH_BOTH – Irá retornar um array indexado tanto pelo nome da coluna quanto pelo índice numérico a iniciar por 0.
PDO::FETCH_GROUP – Agrupa valores iguais da primeira coluna, no nosso caso, livros com o mesmo ISBN serão agrupados pelo índice do ISBN.
PDO::FETCH_KEY_PAIR – Exige que o retorno do sql possua exatamente duas colunas, agrupando os valores da primeira coluna como índice e os valores da segunda como valores do array de retorno.
PDO::FETCH_UNIQUE – retorna somente valores únicos,
caso houvesse dois livros com o mesmo ISBN,
FETCH_UNIQUE retornaria apenas uma.
PDO::FETCH_BOUND – Útil quando você trabalha com o método bindColumn(), atribui o valor da coluna à variável informada neste método.
PDO::FETCH_CLASS – Retorna uma nova instância da
classe que você passa como parâmetro. Caso a classe
passada como parâmetro tenha propriedades com os
mesmos nomes das colunas, os valores serão
atualizados, caso negativo, uma nova propriedade com
o nome da coluna será criada no objeto instanciado. É
como um objeto filho que herda as propriedades do pai
e tem também suas próprias propriedades.
Embora a classe instanciada “Livro” não possui uma propriedade “ano_publicacao”, essa propriedade existe pois é uma coluna da tabela que foi convertida em uma
propriedade do objeto instanciado.
PDO::FETCH_CLASSTYPE – Utilizado junto com FETCH_CLASS, define que é para usar o nome da primeira coluna como nome da classe de retorno.
PDO::FETCH_INTO – Praticamente igual a PDO::FETCH_CLASS, com a diferença de que você passa um objeto já instanciado, o qual terá suas propriedades atualizadas.
◦ Um detalhe sobre o PDO::FETCH_INTO é que não funciona
com o método fechAll, ou seja, você terá que invocar o
método setFetchMode.
PDO::FETCH_SERIALIZE – Igual FETCH_INTO porém o objeto é providenciado como uma string
serializada.
PDO::FETCH_NUM – retorna um array indexado
pelo número da coluna, iniciando com o número 0.
Ideal para quem quer obter o retorno de uma consulta sql no formato de array.
PDO::FETCH_OBJ – retorna um objeto anônimo onde as colunas das tabelas se tornam
propriedades dos objetos.
PDO::FETCH_LAZY – combina PDO::FETCH_BOTH com
PDO::FETCH_OBJ
O método query ira armazenar na variável $rs todos os dados referentes a consulta do banco.
Após a variável $rs ser populada, devemos utilizar um while para percorrer esses dados e trabalharmos com os valores.
Dentro do while inserimos o método fetch do PDO que tem como função resgatar linha a linha do resultado da consulta.
No método fetch utilizamos um parâmetro PDO::FETCH_OBJ, este parâmetro define a forma na qual os dados serão retornados e armazenados na variável
$row, criada dentro do while.
O PDO::FETCH_OBJ trata cada linha da consulta como um objeto, transformando os campos que foram retornados em atributos do objeto $row.
Caso você vá pegar dados oriundos de um formulário web ou mesmo de um banco de dados para formar a consulta sql ou comando sql, o ideal é utilizar o método do PDO prepare e bindParam .
Utilizando esses métodos: prepare e
bindParam, você assegura que seu script
estará livre de “sql injection”.
Na formação do sql, quando usando o prepare , você define um nome que será substituído por outro valor colocando dois pontos antes deste nome.
Após isso, quando invocar o método bindParam , você deve informar o mesmo nome que adicionou na formação do sql como primeiro parâmetro do método.
O segundo parâmetro de bindParam é a variável que possui o valor que deve ser substituído.
Por fim, o terceiro parâmetro é uma constante
do PDO que informa ao sistema que tipo de
dado você está adicionando ao sql.
Os valores possíveis para a constante são:
◦ PDO::PARAM_STR – para valores strings, datas, horas…
◦ PDO::PARAM_INT – para valores inteiros
◦ PDO::PARAM_BOOL – para valor booleano (true ou false)
◦ PDO::PARAM_NULL – valor nulo (null)
◦ PDO::PARAM_LOB – representa valores de grande quantidade de dados
◦ PDO::PARAM_STMT – representa um conjunto de registros, atualmente não é suportado por nenhum driver
◦ PDO::PARAM_INPUT_OUTPUT – especifica que é um parâmetro de entrada e saída para “stored
procedures”
O nome foi inserido em um segundo momento com o
% (per cento), pois em SQL ele representa um coringa.