Rafael Clares


PHP + PostgreSql – Conexão com banco de dados
Julho 9, 2008, 5:48 pm
Arquivado em: PHP, PostgreSql | Tags: , , , ,

Tenho visto muito o pessoal procurar artigos e tutoriais sobre PHP e percebi que a busca por banco de dados ainda é pouca. Pensei em mostrar aqui como se conectar à um banco de dados SQL, afinal de contas o PHP apenas para cálculos e comandos de servidor não é tãoooo divertido embora eu ache fascinante!

Veremos como se conectar ao PostgreSql que é o que eu utilizo como SGBD (sistema gerenciador de banco de dados), o pessoal tem utilizado muito o MySql que também é excelente, gosto mais do PostgreSql devido aos padrões mantidos estarem mais próximos do SQL. (Se ainda não tem instalado baixe em PostgreSql).

Bem, o postgre como muitos (ou todos) os SGBD’s  devem receber como parâmetros os dados de conexão, tais como, usuário, senha, host, port, base.

No PHP o comando utilizado para conectar-se ao PostgreSql é o pg_connect(“parâmetros”), então nada melhor do que começarmos e iremos fazer isso com uma classe (Classes c/ PHP5) !

O arquivo conexao.class.php (o .class é apenas para identificarmos o arquivo como uma classe).

<?

Class Conexao
{
protected $host = “localhost”;
protected $user = “postgres”;
protected $pswd = “postgres”;
protected $dbname = “teste”;
protected $con = null;

function __construct(){} //método construtor

#método que inicia conexao
function open(){
$this->con = @pg_connect(host=$this->host user=$this->user
password=
$this->pswd dbname=$this->dbname“);
 return $this->con;
}

#método que encerra a conexao
function close(){
 @pg_close($this->con);
}

#método verifica status da conexao
function statusCon(){
  if(!$this->con){
   echo “<h3>O sistema não está conectado à  [$this->dbname] em [$this->host].</h3>”;
   exit;
  }
  else{
   echo “<h3>O sistema está conectado à  [$this->dbname] em [$this->host].</h3>”;
  }
 }
}

?>

Set os valores das variáveis host, user, pswd e dbname

host = geralmente localhost ou seu ip
user = usuário que criou ao instalar o postgre
pwsd = senha do usuário do postgre
dbname = a base que deseja se conectar no postgre

Como eu havia dito pg_connect() é o método PHP que conecta-se ao  PostgreSql, o ‘@’ antes do método serve para inibir/ocultar as mensagens de erro do método caso ocorram durante a tentativa de conexao. Você pode  retira-la e testa-la informando algum valor incorreto nas variáveis de conexão. Geralmente ocultamos essas mensagens para que um visitante ao acessar seu sistema não veja os parâmetros utilizados ou nomes de váriaveis que você utiliza na conexão, em outras palavras, ocultamos as mensagens por segurança. Existem outras formas de tratar os erros e  as mensagens com segurança, mas isso não será abordado aqui. Ao menos nesse post, não!

Os valores contidos como parâmetros em pg_connect() são os valores das variáveis setadas no inicio da classe.  Seria interessante criar métodos para setar os valores de variáveis de conexao apenas se você precisasse utilizar mais de um banco (não base, banco) na sua aplicação, para evitar criar 2 classes diferentes poderiamos fazer um método do tipo setUserBanco(), setHostBanco(“localhost 2″), entendeu ? ok!

Mas como trata-se apenas de 1 conexão, seria muitos métodos para pouca coisa!

O método open() retorna o estado da conexao (true ou false), com isso podemos através do método statusCon() saber se a conexao está ativa ou não.

O método close(), como você imaginou encerra a conexao chamando o método PHP pg_close();

Crie agora o arquivo index.php para testarmos a conexao

<?
#incluindo a classe conexao (supondo estar no mesmo diretorio)
include(‘conexao.class.php’);

#instanciando o objeto
$minhaConexao = new Conexao();

#chamada ao metodo open que abra a conexao
$minhaConexao->open();

#verificando o status da conexao
$minhaConexao->statusCon();

#encerrando a conexao
$minhaConexao->close();

#verificando a conexao apos close();
$minhaConexao->statusCon();
?>

É isso pessoal, bem simples e num post futuro veremos como gravar/editar/atualizar/excluir registros de uma tabela usando o PHP e PostgreSql.

Deixei um vídeo tosco mostrando/explicando melhor como funciona essa classe.
Dê uma olhada no vídeo aqui

Abraços,

Rafael Clares


19 Comentários até o momento
Deixe um comentário

bom obrigado o artigo me ajudou com algumas duvidas estagio como desenvolvedor de sistema do tribunal de justiça e estou começando desenvolvendo em php e ultilizando postgresql com banco dai algumas duvidas de conexão espero que você esteja sempre atualizando ok valeu…

Comentário por Gustavo stork

Bom dia… Grata pela informação… Muito útil pra mim…
Qualquer dúvida posso perguntar de você?

Tenha um bom dia…

Comentário por Cláudia Luísa W. E. Ribeiro

Cláudia fique à vontade para perguntar, no que for possível lhe ajudarei. Obrigado pelo comentário.
até logo,

Comentário por Rafael Clares

Muito bom!

Me clareou bem as coisas!

;D

parabens!

Comentário por salsotto

rafaael,
Primeiramente muito bom seu artigo, parabens.
Estive lendo seu artigo ref. ao postgree + PHP e no meio da informatica com tantos BD e tanas linguagens de programação, gostaria se possível, uma opinião sua referente ao uso do PHP com o banco Mysql no quesitos:
– O banco suporta muitos registros? Quantos? Ou vc acha que existem bancos gratuitos que fazem melhor que o Mysql?
– A integração de ECF’s, impressoras matriciais e termicas, é descomplicada ou tem alguma linguagem melhor?

era somente isso…

Obrigado desde já!

Comentário por Alexandre

Olá Alexandre, obrigado pelo comentário. Cara o MySql eu acho muito bom sim usei por algum tempo até conhecer o PostgreSql, eu particularmente acho o Postgre melhor de trabalhar e o principal motivo por eu continuar utilizando-o é devido à proximidade do padrão SQL. Por exemplo a forma de trabalhar é mais parecida com o padrão e o mySql no meu ver tem bem mais particularidades e prefiro ficar mais proximo do padrão. Acredito que o MySql hoje esteja bem melhor do que quando eu utilizei e depois da Sun te-lo “comprado” … muito nome rola agora em torno do MySql. De toda forma essa é minha opnião de usuário, não tenho dados técnicos que possam dizer qual é melhor, eu simplesmente usei um e usei outro e tirei minhas conclusões… até

Comentário por Rafael Clares

Olá Rafael, ótimo artigo, muito prático. Fiz exatamente o que você colocou neste artigo. Só que não está apresentando as mensagens, nem de êxito ou problema com a conexão. A página index.php fica em branco. Sabe o que pode ser?

Comentário por Vinicius

Vinicius, verifique primeiramente as tags PHP perceba que no código está apenas <? e não <?php … para funcionar com a tag menor é preciso que esteja descomentada a linha short_open_tag no seu PHP.INI.
O arquivo conexao.class.php nesse caso, está no mesmo diretório que o index.php.
Verifique também se seu PHP.INI está habilitado para o PGSQL (Postgre), a linha extension=php_pgsql.dll deve estar descomentada.
Bem, com isso você já tem algumas coisas para verificar…caso não consiga é só perguntar …
abraços

Comentário por Rafael Clares

bom estou començando no php e gostaria de saber se para chamar a classe conexão e do mesmo jeito das includes

Comentário por Axel Alexander

Axel, isso mesmo!
de um include e instancie a classe.
ate mais

Comentário por Rafael Clares

Primeriamente, parabéns pelo artigo… Mas comigo aconteceu um erro muito estranho:

Instalei o postgre, crie o usuario, consegui conectar normalmente pelo pg_Admin III, então fui para o php.ini e as extensões do pg estão devidamente descomentadas, também rodei o php_info() e ele retornou: PGLOCALEDIR C:\Program Files\PostgreSQL\8.3\share\locale

ou seja, devidamente instalado.

Mas ao testar a sua classe e script, simplesmente não da erro algum, a página fica em branco… O que poderia ser?

Comentário por Alexandre

Alexandre, retire o @ (arroba) da frente da chamada pg_connect(), o arroba inibe os erros. abraços

Comentário por Rafael Clares

Bom Primeiramente Rafael Parabens percebo que vc atende as todas as duvidas coisa que e meio complicado hoje en dia,,, mas vamos la a include eu sei mas instanciar a classe NÂO ainda
não me leve a mal e que so Programava em Delphi
e to apanhando do PHPOO ainda até mais

Comentário por Axel Alexander

Axel,
de uma lida no post, as 20 últimas linhas estão justamente mostrando como instanciar o objeto conexao.
Abraços.

Comentário por Rafael Clares

bom obrigado Rafael, agora to com outro problema não consigo comfigurar o PHPPGADMIN no xammp e Wim xp eche so pra linux

Comentário por Axel Alexander

Axel, infelizmente não uso o PhpPgAdmin localmente, logo, não tenho como ajuda-lo!
Dê uma olhada no google. Abraços

Comentário por Rafael Clares

Mesmo Assim obrigado… ja consegui cara Veleu se alguem aew ta com Dificuldade posso postar a configuração Abraços ate outra divida

Comentário por Axel Alexander

Olá Rafael… blz

Cara quero te dar os parabéns, pelos artigos sobre o PHP OOP, tenho feito alguns projetos mas nenhum orientado a objetos, minha principal duvida era como criar uma conexão através de classes, graças ao seu artigo já posso iniciar os passos para desenvolver aplicações PHP OOP baseado em BD, me disseram que programar orientado a objetos é mais tranquilo, do que criar arquivos individuais por mais extruturados que estejam vc concorda?

eu particularmente quero morrer quando tenho problemas com o header e looping infinitos do php, com PHP OOP este problema seria minimizado?

bom por enquanto é isto, espero que me responda

abs

Comentário por Joelson

Joelson, obrigado pelo comentário, fico feliz que tenha lhe servido.
Quanto à sua pergunta, com certeza OOP é mais tranquilo, na verdade é mais fácil em todos os sentidos, manutenção, reuso, etc…. Eu diria até que é “gostoso” de escrever ha-ha….
Bem, nunca tive problemas com header e looping, eu comecei a utilizar o PHP ja na versão 5 à pouco tempo, talvez eu encontre essas dificuldades que você mencionou, mas até agora não hehe ainda bem!
Comecei a escrever um artigo simples sobre OOP + BD com PHP5 e PostgreSQL mas como não houve nenhum interesse eu meio que dei uma brecada no artigo, também não sou doido né … hahaha
Na próxima semana vou passar para uma segunda etada, dando continuidade no artigo, acho que será algo bem interessante para quem está querendo aprender.
O primeiro é esse:
http://clares.wordpress.com/2009/04/09/php-5-classes-banco-de-dados/

abraços,

Comentário por Rafael Clares




Deixe um comentário
Linhas e parágrafos quebram automaticamente, endereços de email não serão mostrados, HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>