Usando PDO do PHP
Fala pessoal, vocês conhecem o PDO? Sabe pra que serve? Já usaram ele?
Nesse post irei explicar o que é PDO e os benefícios de seu uso.
PHP Data Objects - PDO nada mais é do que uma interface para banco de dados. Podemos dizer que é uma "classe universal" que nos fornece uma camada de abstração para vários SGBD's (MySQL, PostgreSQL etc) diferentes.
O bom dele é que podemos usar os mesmos métodos para manipulação de dados independente do SGBD, sem contar na segurança contra injeção de SQL.
O PHP usa o driver específico de cada banco de dados, mas a interface para o programador é a mesma, implementada com PDO.
Para exemplificar, criei um cadastro de usuários simples onde faço manipulação com PDO.
Vamos começar pela conexão com o banco de dados:
Observe que se não estivessemos usando PDO, teriamos que usar funções específicas de cada banco de dados, por exemplo, se fossemos conectar com um banco MySQL, teríamos que usar a função mysql_connect
(aliás, o uso dessa função é desencorajado pela documentação oficial do PHP), caso fossemos conectar com um banco PostgreSQL, teríamos que usar a função pg_connect
e assim por diante com cada banco de dados diferente.
PDO nos provê uma interface genérica para todos os bancos de dados, facilitando a manutenção e padronização do código.
Vamos à execução de querys agora..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Prepara uma sentença para ser executada
$statement = $pdo->prepare('INSERT INTO users (name, username, password) VALUES (:name, :username, :password)');
// Filtra os dados e armazena em variáveis (o filtro padrão é FILTER_SANITIZE_STRING que remove tags HTML)
$name = filter_var($post['name']);
$username = filter_var($post['username']);
$password = filter_var($post['password']);
// Adiciona os dados acima para serem executados na sentença
$statement->bindParam(':name', $name);
$statement->bindParam(':username', $username);
$statement->bindParam(':password', $password);
// Executa a sentença já com os valores
if($statement->execute()){
// Definimos a mensagem de sucesso
$_SESSION['message'] = 'Usuário cadastrado com sucesso';
}else{
// Definimos a mensagem de erro
$_SESSION['message'] = 'Falha ao cadastrar usuário';
}
?>
Repare na linha 3 acima, nós não executamos a query de insert diretamente (como fariamos se estivessemos usando um mysql_query
da vida), por segurança, recomenda-se o uso de prepared statements, que são sentenças usando parâmetros. Invés de colocarmos as variáveis diretamente na query, primeiro filtramos elas com filter_var que remove tags HTML e depois damos um bind na sentença, ou seja, associamos os parâmetros às variáveis, isso previne contra o uso de injeções SQL.
Para querys que não precisam de retorno do banco como acima, usamos o método exec da classe PDO para simplificar o trabalho, ele apenas nos retorna o número de registros afetados (no caso de uma exclusão por id, retornaria o valor 1 caso o registro existisse no banco).
E por fim mas não menos importante, para retornarmos registros como em uma listagem, usamos o método query passando a sentença SQL que desejamos executar, ele nos retorna o conjunto de dados pesquisados.
É isso ai pessoal, se vocês desejam não ter problemas futuros com manutenção, segurança e padronização, é altamente recomendado o uso dessa classe, sem contar que ela é voltada para o paradigma atual de desenvolvimento, que é a orientação a objetos. Para mais dúvidas confiram a documentação oficial dela aqui.
Em posts futuros estarei fazendo uso de banco de dados e sempre utilizarei PDO como interface, se precisar, você pode conferir e fazer download desse exemplo completo em meu GitHub.
E você, o que acha dessa classe?
Até mais.