Conteúdos

Usando PDO para conexão com banco de dados

Conteúdos

Olá pessoas,

O acesso a um banco de dados (na verdade acesso a um SGBD, sistema de gerenciamento de banco de dados) é algo muito comum na área de desenvolvimento. E existem os mais variados SGBD por aí: Mysql, Postgres, SQL Server…

Por este motivo que foi implementado a biblioteca PDO no PHP.

Ela facilita a conexão aos mais diversos tipos de SGBD. Alguns exemplos são:

  • CUBRID (PDO)
  • MS SQL Server (PDO)
  • Firebird (PDO)
  • IBM (PDO)
  • Informix (PDO)
  • MySQL (PDO)
  • MS SQL Server (PDO)
  • Oracle (PDO)
  • ODBC and DB2 (PDO)
  • PostgreSQL (PDO)
  • SQLite (PDO)
  • 4D (PDO)

A PDO (PHP Data Objects) é uma biblioteca de abstração de conexão à banco de dados. Ele auxilia na conexão e não na abstração de SQL. Alguns comandos SQL possuem sintaxe diferente dependendo do SGBD usado. Por exemplo:

Um comando para selecionar todos os usuários limitando a lista aos 10 primeiros:

1
SELECT * FROM users LIMIT 10;

No Mysql

1
2
3
SELECT * FROM   users
ORDER BY coluna1 DESC
FETCH FIRST 5 ROWS ONLY;

No Oracle

Então para este tipo de abstração, você deve utilizar outra biblioteca, como a Doctrine Database Abstraction Layer.

Ok, com estas explicações, vamos a PDO.

É necessário ter a PDO instalada no seu sistema. Para tanto rode o comando a seguir (caso esteja em uma distribuição Linux baseada no Debian, caso contrário, dê uma olhada na documentação da PDO sobre como instalar em outros sistemas):

1
sudo apt-get install php-pdo-mysql

Neste caso estou usando a PDO para o mysql, para outros é só procurar pelos pacotes disponíveis no repositório: apt-cache search php-pdo.

Com o pacote instalado, criaremos um banco de dados, uma tabela e alguns dados para teste:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
create database pdoteste;

use pdoteste;

create table users (
  id_user int primary key auto_increment,
  name varchar(40),
  email varchar(60)
) CHARSET=utf8;

insert into users (name, email) values
('Vanildo', 'vanildo@vanildo.com.br'),
('Joao', 'joao@joao.com.br'),
('Gustavo', 'gustavo@gustavo.com.br');

Criado o banco de dados, vamos para o PHP.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php

// Configuramos os acessos
$host   = 'localhost'; // Hosts onde está o servidor Mysql
$dbname = 'pdoteste'; // Banco de dados para acesso
$user   = 'root'; // Usuário do banco de dados
$pass   = ''; // Senha do banco de dados

// Na variavel $dsn colocamos os dados para acesso ao banco de dados
$dsn = "mysql:host=$host;dbname=$dbname";

$pdo = new PDO($dsn, $user, $pass); // Instanciamos a biblioteca
$pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'set names utf8'); // Configuramos o Mysql para 'entender' caracteres UTF-8

$query = 'SELECT * FROM users';

$result = $pdo->query($query)->fetchAll(PDO::FETCH_ASSOC); // Executamos a SQL de consulta e retornamos um array

print_r($result);

No começo do arquivo nós criamos algumas variáveis com os dados de acesso ao banco de dados.

Logo depois criamos o dsn (Data Source Name), que contém os dados necessários para conexão com o banco, como:

  • Qual SGBD será usado, nesse caso mysql
  • O host onde o banco de dados está
  • O nome do banco de dados para acesso

Então instanciamos a classe PDO com o dsn, usuário e senha do banco. Fizemos a configuração do Mysql demonstrando que vamos usar caracteres em UTF-8.

A partir daqui a variavel $pdo, conterá o objeto da PDO que provê vários métodos. Usamos o método query() para executar uma query SQL qualquer.

O poder da PDO vai além disso, com métodos como prepare() no qual podemos “preparar” uma SQL antes de enviá-la para o banco, filtrando os dados e evitando SQL Injection, mas isso ficará para um próximo post.