PHP - Conectando bancos de dados através do PDO (PHP Data Object)



Com o advento do php 7 precisamos rever alguns procedimentos que acabaram ficando conosco desde os primórdios do PHP. Um destes pontos a serem revistos é o trabalho com bancos de dados. Uma grande parte dos desenvolvedores PHP ainda trabalha com mysql_query, seja pelo costume, preguiça ou mesmo ambiente legado. Precisamos evoluir deste ponto e começar a trabalhar com bibliotecas mais modernas e flexiveis. Está na hora de começarmos a trabalhar com PDO ou PHP Data Object.

PDO é uma classe nativa para conexão com banco de dados e que, além de trazer recursos excelentes, também pode ser mais rápida se adequadamente utilizada, além de adicionar uma camada de abstração que faz o trabalho de mudar de base de dados muito tranquila. PDO suporta inúmeros bancos como MySQL, SQLite, Postgree, Oracle e outros.

Vamos dar algumas dicas simples e rápidas para começar a usar o PDO.

CONEXÃO


Abaixo segue um exemplo de conexão, juntamente com o tratamento de erro adequado para o caso da conexão com o banco de dados falhar:

 try {  
 $pdo = New PDO("mysql:host=localhost;dbname=banco","login","senha");  
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
 } catch (PDOException $e) {  
      showHandler('Error');  
      showError('Sorry,'.$e->getMessage());  
 }  

A linha $pdo = New PDO("mysql:host=localhost;dbname=banco","login","senha"); propriamnete faz a conexão com o banco MySQL

A linha $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) define os tipos de erro que serão exibidos. É interessante definir os erros pois muitas vezes por questão de segurança não queremos que o usuário veja certas informações do servidor em caso de algum erro.

Dentro de catch estão as funções que exibem erro caso a conexão falhe.

FAZENDO UMA QUERY


Para fazer uma query basta usar a seguinte sintaxe:

 $result = $pdo->query("SELECT * FROM tabela");  

Similar ao mysql_query. Para recuperar os dados existem várias formas. Podemos fazer um loop dos dados com while:

 while ($row = $result->fetch()) {  
      echo $row['campo1']  
 }  

ou atribuir os mesmos diretamente a uma array ao invés de fazer um loop por todos os ponteiros:

 $data = $result->fetchAll();  

Estas são as maneiras mais básicas de acessar os dados de um banco e com elas   já podemos fazer muitas coisas interessantes. Existem outras maneiras de preparar e executar consultas mas que necessitam de outro post.

INSERINDO DADOS


Inserir dados é muito parecido com a consulta em si. O que muda basicamente é a sintaxe dos comandos no banco de dados.

A maneira mas simples de demonstar a inserção de dados é a que segue abaixo:

 $qy = "INSERT INTO tabela (campo1,campo2,campo3) VALUES ('Andre','Programador',33)";  
 $pdo->query($qy);  

onde 'tabela' é qualquer tabela de seu banco e 'campo1' a 'campo3' são os campos de sua tabela.

Outra maneira de fazer é utilizando Prepared Statements:

 $qy = "INSERT INTO tabela (campo1,campo2,campo3) VALUES (:nome,:profissao,:idade)";  
 $pre = $pdo->prepare($qy);  
 $pre->execute(Array(  
 ':nome' => 'Andre',  
 ':profissao' => 'Programador',  
 ':idade' => 33  
 ));  



Neste caso é em $pre->execute que a query é executada. Este método ajuda a prevenir SQL injections.

Para retornar o ID do ultimo registro inserido utilizamos:

 $pdo->lastInsertId();  

CONCLUSÃO


A PDO é uma classe extremamente robusta, funcional e fácil de trabalhar. Neste post mostramos apenas o básico para iniciar. Vale a pena estudar e começar a usa-la já que as antigas funções mysql_query serão retiradas das novas versões do PHP.

REFERÊNCIAS


Livro: Popel, Dennis - Learning PHP Data Objects - Ed Packt Publishing
Codecourse - https://www.youtube.com/user/phpacademy

Comentários

Postagens mais visitadas deste blog

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

MySQL - Clonando tabelas na linha de comando

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()