Como Conectar MySQL Com PHP Via PDO
Como Conectar MySQL Com PHP Via PDO
Veja neste artigo como conectar ao MySQL com PHP via PDO e como utilizar
os recursos desta conexo e forma eficaz.
Neste artigo veremos passo a passo de como realizar a conexo com
o banco de dados MySQL atravs do PHP e como utilizar os recursos
desta conexo. Utilizaremos para este artigo um recurso chamado
PDO, que ir nos auxiliar e facilitar a conexo com o MySQL, mas
antes de comear com a mo na massa importante e necessrio
entender o que o PDO e como ele ir nos auxiliar.
PDO
PDO ou PHP Data Objects define uma interface consistente para
acesso a banco de dados em PHP, ou seja, com o PDO podemos
conectar no s ao MySQL mas tambm a muitos outros bancos
como PostgreSQL, SQLServer, Oracle e assim por diante, basta
utilizarmos o driver adequado.
Voc pode questionar: "Se eu vou utilizar apenas MySQL, no
melhor instalar as bibliotecas dependentes dele e utilizar apenas as
funes relacionadas ao MySQL?" A resposta no. Voc nunca deve
ficar amarrado ao banco de dados em que est trabalhando (este
um princpio simples relacionados a boas prticas), e quando voc
opta por usar as funes nativas do MySQL, sem nenhuma camada
de abstrao (Como o PDO, por exemplo), voc est colocando todo
seu projeto em risco, totalmente dependente de uma tecnologia que
amanh ou depois pode no ser mais vivel.
Imagine se daqui a dois ou trs anos decidido que o banco de
dados da sua aplicao ser migrado de MySQL para Oracle por
questes de performance. Nesse caso voc ter um trabalho rduo
em converter todas as funes que antes eram apenas entendidas
Depois de instalado o PDO e o PDO para o MySQL ento iremos ativlo no php.ini, que pode ser encontrado
em /etc/php5/apache2/php.ini. Voc deve incluir as linhas
da Listagem 2 no php.ini.
Listagem 2. Ativando PDO no php.ini
extension=pdo.so
extension=pdo_mysql.so
Desenvolvendo
J temos todo o conceito do funcionamento do PDO em mente, temos
tambm ele instalado e configurado em nosso ambiente, agora s nos
resta comear a desenvolver nosso projeto.
Para comear, iremos criar uma classe chamada Conexao que ser
responsvel por gerenciar as conexes com o banco de dados.
atravs dessa classe que toda nossa aplicao conversar com o
banco e neste exato ponto que temos a ponte de abstrao do PDO.
Observe a Listagem 3.
Listagem 3. Classe Conexao.php
<?php
class Conexao {
public static $instance;
private function __construct() {
//
}
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new
PDO('mysql:host=localhost;dbname=basedetestes', 'root',
'123456', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES
utf8"));
self::$instance>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$instance>setAttribute(PDO::ATTR_ORACLE_NULLS,
PDO::NULL_EMPTY_STRING);
}
return self::$instance;
}
}
?>
Por fim, temos nossa conexo criada e configurada via PDO com
nossa base de dados MYSQL. Lembra que falamos que neste ponto
que ocorre a comunicao direta da nossa aplicao com a base de
dados? Ento exatamente aqui o nico local que precisaremos
mudar caso seja necessrio mudar nosso banco de dados de MYSQL
para qualquer outro.
Vamos prosseguir com nosso artigo mostrando como utilizar nossa
classe Conexao.php em nossa aplicao, mas para isso iremos
montar um cenrio de teste para melhor entendimento.
Nosso cenrio: Vamos criar uma estrutura para cadastro do usurio,
onde teremos POJO + DAO. No entraremos em detalhes para que
serve um POJO ou um DAO, pois so conceitos relacionados a padro
de projeto e como dissemos anteriormente, fogem do escopo deste
artigo. Mesmo que voc no os conhea (recomendamos que voc os
estude urgentemente), voc poder continuar com este artigo e
entender o uso do PDO.
Primeiro vamos a criao do nosso POJO Usuario.php, conforme
a Listagem 4.
Listagem 4. Usuario.php
<?php
class PojoUsuario {
private
private
private
private
private
private
$cod_usuario;
$nome;
$email;
$senha;
$ativo;
$perfil;
}
?>
return $p_sql->execute();
} catch (Exception $e) {
print "Ocorreu um erro ao tentar executar
esta ao, foi gerado um LOG do mesmo, tente novamente mais
tarde.";
GeraLog::getInstance()->inserirLog("Erro:
Cdigo: " . $e->getCode() . " Mensagem: " . $e>getMessage());
}
}
VALUES (
:nome,
:email,
:senha,
:ativo,
:cod_perfil)";
$p_sql = Conexao::getInstance()>prepare($sql);
$p_sql->bindValue(":nome", $usuario>getNome());
$p_sql->bindValue(":email", $usuario>getEmail());
$p_sql->bindValue(":senha", $usuario>getSenha());
$p_sql->bindValue(":ativo", $usuario>getAtivo());
$p_sql->bindValue(":cod_perfil", $usuario>getPerfil()->getCod_perfil());
return $p_sql->execute();
} catch (Exception $e) {
print "Ocorreu um erro ao tentar executar
esta ao, foi gerado um LOG do mesmo, tente novamente mais
tarde.";
}
}
public function Editar(PojoUsuario $usuario) {
try {
$sql = "UPDATE usuario set
nome = :nome,
email = :email,
ativo = :ativo,
cod_perfil = :cod_perfil WHERE
cod_usuario = :cod_usuario";
$p_sql = Conexao::getInstance()>prepare($sql);
$p_sql->bindValue(":nome", $usuario>getNome());
$p_sql->bindValue(":email", $usuario>getEmail());
$p_sql->bindValue(":ativo", $usuario>getAtivo());
$p_sql->bindValue(":cod_perfil", $usuario>getPerfil()->getCod_perfil());
$p_sql->bindValue(":cod_usuario", $usuario>getCod_usuario());
return $p_sql->execute();
} catch (Exception $e) {
print "Ocorreu um erro ao tentar executar
esta ao, foi gerado um LOG do mesmo, tente novamente mais
tarde.";
}
}
public function EditarComSenha(PojoUsuario
$usuario) {
try {
$sql = "UPDATE usuario set
nome = :nome,
email = :email,
ativo = :ativo,
senha = :senha,
cod_perfil = :cod_perfil WHERE
cod_usuario = :cod_usuario";
$p_sql = Conexao::getInstance()>prepare($sql);
$p_sql->bindValue(":nome", $usuario>getNome());
$p_sql->bindValue(":email", $usuario>getEmail());
$p_sql->bindValue(":ativo", $usuario>getAtivo());
$p_sql->bindValue(":senha", $usuario>getSenha());
$p_sql->bindValue(":cod_perfil", $usuario>getPerfil()->getCod_perfil());
$p_sql->bindValue(":cod_usuario", $usuario>getCod_usuario());
return $p_sql->execute();
} catch (Exception $e) {
print "Ocorreu um erro ao tentar executar
esta ao, foi gerado um LOG do mesmo, tente novamente mais
tarde.";
}
}
public function
AlterarSenhaAlreadyCripted($cod_usuario, $senha_nova_md5) {
try {
$sql = "UPDATE usuario set
senha = :senha_nova
WHERE
cod_usuario = :cod_usuario";
$p_sql = Conexao::getInstance()>prepare($sql);
$p_sql->bindValue(":senha_nova",
$senha_nova_md5);
$p_sql->bindValue(":cod_usuario",
$cod_usuario);
return $p_sql->execute();
} catch (Exception $e) {
print "Ocorreu um erro ao tentar executar
esta ao, foi gerado um LOG do mesmo, tente novamente mais
tarde.";
GeraLog::getInstance()->inserirLog("Erro:
Cdigo: " . $e->getCode() . " Mensagem: " . $e>getMessage());
}
}
public function AlterarSenha($cod_usuario,
$senha_antiga, $senha_nova) {
try {
$pojoUsuario = $this>BuscarPorCOD($cod_usuario);
if ($pojoUsuario->getSenha() ==
md5(trim(strtolower($senha_antiga)))) {
$sql = "UPDATE usuario set
senha = :senha_nova
WHERE
cod_usuario = :cod_usuario
and senha = :senha_antiga";
$p_sql = Conexao::getInstance()>prepare($sql);
$p_sql->bindValue(":senha_nova",
md5(trim(strtolower($senha_nova))));
$p_sql->bindValue(":senha_antiga",
md5(trim(strtolower($senha_antiga))));
$p_sql->bindValue(":cod_usuario",
$cod_usuario);
return $p_sql->execute();
}
else
return false;
} catch (Exception $e) {
print "Ocorreu um erro ao tentar executar
esta ao, foi gerado um LOG do mesmo, tente novamente mais
tarde.";
}
}
public function Deletar($cod) {
try {
$sql = "DELETE FROM usuario WHERE cod_usuario
= :cod";
$p_sql = Conexao::getInstance()>prepare($sql);
$p_sql->bindValue(":cod", $cod);
return $p_sql->execute();
} catch (Exception $e) {
Ronaldo Lanhellas
Bacharel em Cincia da Computao. Atuando como Analista de Sistemas
Java.