PHP Moderno: PDO — Uma breve introdução

Diversas aplicações persistem informações em diversos banco de dados: MySQL, PostgreSQL e Oracle por exemplo. E cada fabricante disponibiliza um driver/extensão diferente para conexão com seu banco por exemplo o MySQL é(era) função mysql_*(), Oracle é(era) oci_*(). Agora pensa se num projeto você tiver diversos banco de dados diferentes, seria mysql_*() e oci_*() para todos os lado! Imagina como será seu código… Agora e se tivéssemos um padrão para todos os banco de dados. Se para conectar num Oracle você usar o mesmo padrão MySQL ou MS-SQL? Seria lindo né! Pois é, isso existe e se chama PDO.

PDO ou PHP data objects é uma coleção de interfaces para comunicação com banco de dados onde cada fabricante cria seus drives/extensões obedecendo esse contrato de interface criando um padrão facilitando nossa vida.

OBS: Cada fabricante possui suas declarações SQL específicas. Isso precisa ficar claro!

Vamos a um exemplo pratico(neste exemplo estou usando o MySQL).

Primeiramente vamos criar um banco de dados de exemplo:

create database pdo_teste;

Agora vamos criar uma tabela em nossa base de dados:

CREATE TABLE `pdo_teste`.`agenda` (
 `id` INT NOT NULL AUTO_INCREMENT,
 `nome` VARCHAR(45) NOT NULL,
 `email` VARCHAR(100) NOT NULL,
 PRIMARY KEY (`id`));

Tabela criada, vamos para nosso script.

Primeiramente vamos conectar nosso script a base de dados:

<?php

try {
$pdo = new PDO('mysql:host=127.0.0.1;dbname=pdo_teste;port=3306', 'root', '');
} catch (\PDOException $e) {
echo $e->getMessage() . PHP_EOL;
echo $e->getTraceAsString();
exit;
}

A string passada no construtor da classe PDO é chamado de DSN, para mais informações http://php.net/manual/pt_BR/pdo.drivers.php.

Agora que estamos conectados, vamos inserir alguns dados na nossa tabela:

$pdo->beginTransaction();

try {
$stmt = $pdo->prepare('insert into agenda (nome, email) values (:nome, :email)');

$agenda = array(
['nome' => 'Thor', 'email' => 'thor@starkindustries.com'],
['nome' => 'Tony Stark', 'email' => 'tony.stark@starkindustries.com'],
['nome' => 'Steve Rogers', 'email' => 'steve.rogers@starkindustries.com']
);

for ($i=0; $i<count($agenda); $i++) {
$stmt->bindParam(':nome', $agenda[$i]['nome']);
$stmt->bindParam(':email', $agenda[$i]['email']);
$stmt->execute();
}

$pdo->commit();

} catch (\PDOException $e) {
echo $e->getMessage() . PHP_EOL;
echo $e->getTraceAsString();
$pdo->rollBack();
exit;
}

Como podemos ver a primeira coisa que devemos fazer é preparar nossa query. O método prepare retorna um statement. Nesse caso estou utilizando :nome e :email como um placeholder para utilizar a mesma query diversas vezes e o próprio PDO da uma sanitizada na variável evitando SQL Injection por exemplo. Depois disso a gente corre nosso array de dados, da um bind nos placeholders com os nossos dados e incluímos as informações no banco.

Depois dos dados incluídos no banco, é hora de buscar essas informações:

try {
$stmt = $pdo->prepare('select nome, email from agenda');
$stmt->execute();

echo "<h1>Agenda</h1>" . PHP_EOL;
echo "<ul>" . PHP_EOL;
while (($contato = $stmt->fetch(PDO::FETCH_OBJ)) !== false) {
echo "<li>{$contato->nome}: {$contato->email}</li>" . PHP_EOL;
}
echo "</ul>" . PHP_EOL;
} catch (\PDOException $e) {
echo $e->getMessage() . PHP_EOL;
echo $e->getTraceAsString();
exit;
}

Nada de diferente do que vimos, nós preparamos a nossa query e executamos a mesma. Depois disso utilizamos o método fetch para percorrer os resultado, veja que temos uma variável de classe(variável static) que utilizamos no método fetch que diz para retornar um objeto do tipo stdClass.

Agora reflita e veja as vantagens que essa abordagem nos proporciona! Esqueça mysql_*() ou mysqli_*() e comece a utilizar PDO ainda hoje!

Para mais detalhes visite o site oficial do php http://php.net/manual/pt_BR/book.pdo.php

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.