PHP + PostgreSql – Conexão com banco de dados

  • Autor do post:
  • Categoria do post:PHP DEV

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

Este post tem 79 comentários

  1. Gustavo stork

    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…

  2. Cláudia Luísa W. E. Ribeiro

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

    Tenha um bom dia…

  3. Rafael Clares

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

  4. salsotto

    Muito bom!

    Me clareou bem as coisas!

    ;D

    parabens!

  5. Alexandre

    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á!

  6. Rafael Clares

    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é

  7. Vinicius

    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?

    1. Rafael Clares

      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

  8. Axel Alexander

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

    1. Rafael Clares

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

  9. Alexandre

    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 FilesPostgreSQL8.3sharelocale

    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?

    1. Rafael Clares

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

  10. Axel Alexander

    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

    1. Rafael Clares

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

  11. Axel Alexander

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

    1. Rafael Clares

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

  12. Axel Alexander

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

  13. Joelson

    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

    1. Rafael Clares

      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,

  14. alexandre

    mt bom!!

  15. HSlife

    Oi amigo, tudo bem? Aqui comigo aconteceu uma coisa curiosa, a função pg_close() não encerra a conexão. Quando eu tiro o @ ele me mostra o seguinte erro: “Warning: pg_close() expects parameter 1 to be resource, null given in C:xampphtdocsconexao.class.php on line 22”. Conferi com o manual do PHP e está tudo certo. Por acaso é alguma configuração no meu PHP? Estou usando o XAMPP 1.7.3 com Postgres 8.3

    1. Rafael Clares

      o pg_close() recebe um parâmetro, tente pg_colse($con); Sendo $con a var da conexão.

  16. fogueth

    olha a sua dica foi muito util para concluir um trabalho. agradecia se me podece mandar o video….

  17. CARLOS

    SEU TUTORIAL NÃO DEU CERTO!
    QUANDO EU RODO O CODIGO NO APACHE
    NÃO APARECE NADA A TELA FICA TODA BRANCA!
    E NEM CONECTA COM BANCO POSTGRESQL!

    1. Rafael Clares

      Rs rs , to achando que vc é que não deu certo amigão, deve ter escrito tudo em maiúsculas como fez no comentário, tente uma outra abordagem brother, por ex:
      Olá, não consegui fazer, o que pode estar errado?
      Sacou como é ? um pouco mais de humildade na hora de afirmar que uma coisa que você não sabe não funcionou!
      Se tiver alguma dúvida e puder não escreve-la “gritando” … é só me perguntar ok, se reparar aí, respondo a todas as perguntas possíveis.
      Boa sorte!

  18. carlos

    Olá, Rafael tudo bem com vc , poderia me ajudar? (tá bom assim pra vc brother!)

    eu fiz tudo que vc falou descomentei as linhas no php.in, verifiquei tudo que vc ja disse
    mais ainda não conecta no banco. ja criei o bancos e as tabelas mais quando fou conectar aparece em branco.
    queria saber se eu tenho que instalar o postgre dentro da pasta do apache pra funcionar pois quero acessar o banco de dados via codigo.

    outra coisa eu não fui rude com vc apenas falei que não deu certo?
    eu entendo sobre programação php, java, ajax, C#, C++, mysql, oracle e sql serve. só que me pedirão pra desenvolver um sistema em postgres, como nunca dinha configurado um resolvi pedir ajuda.
    porque eu instalo tudo certo crio o banco e as tabelas mais não consigo acessar, quando eu mudo pro sql server ele conecta no banco mais no postgres eu não consigo conectar.
    mais faleu ai Rafael e desculpa ai por qualquer coisa flws!!!!

    1. Rafael Clares

      Carlos, o post é sobre conectar o PHP com PostgreSql, certamente eu cometi um erro ao não colocar no post que é requisito ter o postgre funcionando, digo isso porque a conexão feita pelo PHP é tão simples quanto a do MySql, uma única linha pg_connect(). Se o método não está funcionando é porque há algo de errado com PHP ou PostgreSQL.
      Já descomentou a linha php_pgsql.dll ?
      Se sim, verifique no diretório do postgre o arquivo data/pg_hba.conf , abra esse arquivo e verifique se essa linha está igual no seu arquivo:
      # IPv4 local connections:
      host all all 127.0.0.1/32 md5

      Flw

      1. carlos

        Rafael, eu dei uma olhada pg_hba.conf esta ok!
        ai eu prestei atenção na hora de estarta o postgres ele fala que não pode criar o doretorio .gnupg no “/opt/postgresql/9.0/.gnupg” o postgre tem acesso negado? o que eu faço pra resolver isso?
        eu estou achando que por causa disso pois o codigo de conexão esta tudo ok!
        Rafael outra coisa eu tenho que intalar o apache no mesmo diretorio ou não?
        desde já agradeço! flws.

        1. Rafael Clares

          Carlos estou sem internet até segunda, só a partir desse dia poderia ajudar ok.

        2. Rafael Clares

          Então cara, sobre o problema do postgre não consigo te ajudar, talvez seja interessante você fazer uma busca no google, isso se acontece em qualquer base o problema.

  19. carlos

    oi, Rafael cara como tu conseguiu conectar com postgres
    ja fiz de tudo mais so aparece apagina em branco
    me uma luz ai cara!!

    1. Rafael Clares

      Verifique se a extensão php_pgsql está descomentada no php.ini

      1. Carlos

        Ae, galera consegui conectar com postgres, esta ai o codigo:

        e só isso pode ter certeza !!!
        qualquer duvida posso ajudar!

        if(!@($conexao=pg_connect (“host=localhost dbname=controle_acesso port=8080 user=postgres password=postgres”))) {
        print “Não foi possível estabelecer uma conexão com o banco de dados.”;
        } else {
        //pg_close ($conexao);
        print “Conexao OK!”;
        }

  20. Ricardo

    Olá Rafael, tenho lido alguns artigos do seu site e pego muitas dicas. Agradeço pelo trabalho de apoio aos iniciantes. Estou com um problema após ler e reler seu post sobre conexão do php com db postgres eu resolvi testar, porém mesmo os dados estando corretos o php nao conetca no db existe alguma configuração prévia em ambos os softwares para que se comuniquem. Utilizo ubuntu 10.10, rodando postgresql 8.4, apache2 e php5 todos funfando 100% mas mesmo com sua ajuda ainda não consegui conectar no banco só aparece a msg de que nao estou conectado e mesmo que eu retire o ‘@’ do pg_connect nao me eh retornado o erro, se for possível me ajudar te agradeço…

    1. Rafael Clares

      Ricardo, você precisa ver se o PHP foi compilado com o Postgre, se você instalou o apache2 e o PHP e só depois intalou o postgre então você precisa recompilar a instalação do apache2 e PHP. Dê uma olhada no phpinfo() para ver se está compilado o postgre.

      1. Ricardo

        Rafael, observei novamente o phpinfo() e me parece que está ok, nele contém referências ao postgres sim e também ao pgsql, mas ainda assim eu nao consigo conectar ao banco nem pelo php tão pouco pelo pgadmin, o que eu devo setar nos arquivos de configuração do apache2, php5 e postgres8.4 para que ocorra essa interação?
        Desde já agradeço sua colaboração…

        1. Rafael Clares

          Então Ricardo, acredito que seja algo na instalação dê uma busca no google pelo termo: PHP + PostgreSQL no Ubuntu
          Dái irá encontrar os tutoriais de install, me recordo que no linux tem um lance de ter que alterar a senha mas não tenho certeza se na sua distro há essa necessidade!
          Boa sorte!

  21. Ricardo

    Obrigado Rafael, refiz os passos de instalação do postgres, apache2 e php5 e descobri que não havia instalado o phppgadmin, após ter instalado o mesmo e modificado a senha do usuario postgres consegui conectar o php com postgres atráves do video que vc postou, agradeço mais uma vez pela sua ajuda. Não querendo ser muito chato, mas você tem algum material, tipo apostila ou manual de php? se tiver seria possivel me enviar por e-mail, como já disse estou começando a aprender a programar nessa linguagem e como estou nessa sozinho toda ajuda é bem vinda.
    Vlw, até a próxima…

    1. Rafael Clares

      Ricardo, fico feliz que tenha conseguido!
      Olha a melhor apostila de PHP que já vi é on-line, é na verdade a documentação do PHP, muito completa. http://www.php.net
      Se souber o que quer fazer, como fazer é muito mais fácil!
      abraços!

  22. Denner Luan

    E ae Rafael,
    Fui fazer um teste com essa classe, mas ele sempre mostra q não está conectado. Não teria q colocar a porta ?

  23. fabio luis

    fala rafael,

    tive um problema aqui …… a função pg_close($this->con) não fecha a conexão. o que pode ser ? já fiz algumas alterações e nada ..

    1. Rafael Clares

      Eae Fábio, poxa cara, estranho mesmo, será que seu pgsql não está configurado para uma conexão persistente?
      dá uma lida em:
      http://php.net/manual/en/function.pg-close.php

      De toda forma vou fazer um teste com esse exemplo que postei e ver se acontece aqui…
      abs

  24. Ubiraci Rafael Gomes

    Muito boa a explicação, muito didática.

  25. Will

    Parabéns não somente pelo conteúdo apresentado mas também a forma como foi postado.
    Me ajudou muito.

  26. Lenadro

    Olha excelente video. Gostaria em saber onde posso ver todos os videos que vc ja criou sobre php e postgre.
    E se vc tem alguns videos ou tutoriais que explicam como trabalhar com html + php + postgre

    1. Rafael Clares

      Leandro, ainda não criei vídeos novos, infelizmente o tempo não está à nosso favor.
      Em breve teremos mais conteúdos para compartilhar.
      Fico lhe devendo essa.
      abraços

  27. Jonathan

    Rafael me ajuda ai, to tentando aqui mas dá esse erro:

    Fatal error: Call to undefined function pg_connect() in C:Arquivos de programasEasyPHP-5.3.8.0wwwpgclassesconexao.class.php on line 16

    Pelo que parece ele não tá reconhecendo o pg_connect. Tem como me ajudar cara? Será que eu posso ter um contato melhor com você para resolver uns problemas por aqui? Caso tenha, entre em contato comigo: [email protected]

    1. Rafael Clares

      Verifique se está habilitado no PHP.ini o seu postgreSql.
      ;extension=php_pdo_pgsql.dll

      retire o ; da frente da linha no php.ini

      1. Jonathan

        Já habilitei isso, mesmo assim continua o erro :/

        1. Rafael Clares

          Nossa cara eu disse ;extension=php_pdo_pgsql.dll mas seria para descomentar a linha:
          extension=php_pgsql.dll

      2. Jonny

        Sim foi exatamente o que eu fiz, mas não dava certo. Agora mudei para o Xampp, e usei os codigos aqui do tópico. (antes estavo usando o do video) e aconteceu o que acontecia com o Carlos lá em cima nos comentários. A tela fica inteira branca. Já li todos comentarios, nada daqui resolveu.

        É como se nada acontece-se mesmo. E está tudo giual ao tópico, ja habilitei lá pra usar só o <? e tudo mais como você já explicou, mas não dá em nada nada.

        Estou usando o código assim:

        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 “O sistema não está conectado à [$this->dbname] em [$this->host].”;
        exit;
        }
        else{
        echo “O sistema está conectado à [$this->dbname] em [$this->host].”;
        }
        }
        }

        ?>

        No index está assim:

        open();

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

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

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

        E meu pgsql no php.ini ja esta sem o “;” e tudo mais. Não sei mesmo o que anda a acontecer.

        1. Rafael Clares

          retire o @ da frente do pg_connect para ver a mensagem de erro e me informe a mensagem.

      3. Jonny

        Continua na mesma, retirei o @ e a tela continua branca. :/

  28. Jonny

    Acho que vale lembrar que estou usando postegre 8.4 com pgadmin 1.10. Há alguma diferença??

    1. Rafael Clares

      Acho que sua index tem algum problema ai, está assim ?

      $minhaConexao->open();
      $minhaConexao->statusCon();

      porque você disse que está assim:

      open();

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

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

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

      O método open está perdido aí nesse exemplo que deu…

      Tente colocar dados incorretos do banco e retirar o @ porque assim deverá dar erro e exibir na tela, se continuar branco é algum problema no PHP/APache

      1. Jonny

        Ae cara, consegui resolver o problemas qui ^^.
        Simplesmente era lá no PHP Extensions, só que no programa easyphp. Aonde clico lá, a caixinha da dll estava desmarcada, mesmo q no php.ini estava sem o “;” lá ela ficava desmarcada.
        Bom, tinha esquecido de avisar que esu estava a testar no Xampp, e logo depois mesmo erro no Wamp, mas vi que no video você usava EasyPHP e baixei, e com isso deu certo.

        Muito bom blog, e você é bem legal, resolve dúvidas, e olha que o post aqui é antigo. Recebi respostas no mesmo dia. Parabéns pelo trabalho.

        Agora uma coisa, vo ter de estudar como fazer agora para exibir informações do banco. Mas seria legal um tutorial novo ai sobre isso em. Ia ajudar bastante ^^

        Abrçs e boa sorte o/

  29. igor

    Oi Rafael,

    Estou usando o EasyPHP está dando erro de Parse Erro : syntax error, T_CLASS na linha 4 , na linha 4 está assim;

    include(‘conexao.class.php’);

    não estou conseguindo achar o erro poderia me dar uma força

    Valew

  30. igor

    Rafael,

    Funcionou era um erro no parametros ” .

    Mto Bom cara o post, poderia depois fazer de cadastros e formularios.

    Abraço

  31. RICARDO FERNANDES DA SILVA

    Rafael, estou com o mesmo problema de tela em branco no momento da conexão, já vasculhei a net e nada de solução, configurei o phd.ini, o http.conf e nada.
    Uso os seguintes programas:
    PostgreSQL 8.4.9 instalado em c:postgresql8.4
    PHP 5.2.17 instalado em c:PHP
    Apache HTTP Server 2.2 instalado em c:Apache
    PHP Editor em c:PHP Editor

    O apache esta integrado com o PHP e com o PHP Editor, pelo menos o comando phpinfo() exibiu as configuração do PHP.

    Porém quando tento a conexão abaixo não aparece nada, nem mesmo erro, tentei colocar senha errada e nada.
    banco = $banco;
    $this->strCon = “host=$this->host user=$this->user password=$this->pswd dbname=$this->banco”;
    }

    function Open() {
    $this-> = pg_connect($this->strCon);
    }

    function Close(){
    pg_close($this->con);
    }

    function StatusCon() {
    if($this->con){
    echo ‘conectado’;
    }
    else{
    echo ‘desconectado’;
    exit;
    }
    }
    }
    ?>

    O index.php ficou assim:
    Open();
    $conexao->StatusCon();
    ?>

    Por favor veja se consegue encontrar algum erro acima. Desde já obrigado!

    Para contato via hotmail: “[email protected]” se puder me adicionar vou estar precisando muito de seu axilio.

    1. Rafael Clares

      Ricardo, e quanto as short tags?
      Já tentou mudar de <? para <?php

  32. RICARDO FERNANDES DA SILVA

    tentei ainda …
    <?php
    // conexao.inc.php
    $str_conexao="host=127.0.0.1 dbname=postgres port=5432 user=postgres password=postgres";
    $conexaophp=pg_connect($str_conexao);
    if (!$conexaophp){
    echo "Houve erro ao conectar ao banco" . pg_last_error();
    echo "Informe a mensagem acima ao suporte pelo fone 9999 ou pelo e-mail
    [email protected] “;
    exit;
    }
    ?>

    também retornou tela em branco

    1. Rafael Clares

      Já descomentou a linha:
      extension=php_pgsql.dll
      no PHP.ini , você tem que descomentar, retirando o ; da frente da linha
      outra coisa, coloque em todos os arquivos, na primeira linha a linha que segue abaixo:
      error_reporting( E_ALL );

      Assim todos os erros serão reportados!

  33. LG

    Boa tarde. Vi alguns comentários de pessoas que estão visualizando apenas uma tela em branco. Estava com esse problema e acabei de descobrir que não havia instalado o php5_pgsql, o módulo do Postgres para PHP. Recomendo que tentem isso.
    Outro detalhe é sobre a função close. Também não está encerrando a minha conexão. Mas, sobre isso, estamos conectando com o pg_connect e não com o persistente pg_pconnect. Sendo assim, a conexão é encerrada automaticamente após o encerramento do script, tornando a função desnecessária.
    Parabéns pelo post, me ajudou muito.
    Abraço!

  34. fernablues

    Parabens ! pelo tutorial muito bom ! Tive alguns problemas para configurar o PHP + Postgre mas foi só ativar algumas Dll no PHP.ini copiar 2 para o diretorio de extensões e consegui fazer a conexão com o BD Postgre.
    Mas quero pedir uma ajuda.
    Tentei fazer um select no index.php e parece que ele não reconhece a instaciação da classe e da um erro. pode dar uma ajuda ?

    mandando o script que criei e o erro que recebi :

    index.php

    <?php
    /*
    * Created on 02/04/2012
    *
    * To change the template for this generated file go to
    * Window – Preferences – PHPeclipse – PHP – Code Templates
    */
    #incluindo a classe conexao (supondo estar no mesmo diretorio)
    echo'include da classe.’;
    include(‘conexao.class.php’);

    echo ‘Instanciar o objeto conexao.’;
    #Instanciar o objeto conexao
    $minhaConexao = new conexao();

    echo ‘Chamada ao metodo open que abra a conexao.’;
    #chamada ao metodo open que abra a conexao
    $minhaConexao->open();

    echo ‘Verificando o status da conexao.’;
    #verificando o status da conexao
    $minhaConexao->statusCon();

    print “Executar consulta a base Postgre –>> SAFWEB”;
    $result = pg_query($con, “SELECT situacao, titulo_situacao FROM situacao_condutor”);
    if (!$result) {
    echo “>> Erro na consulta !”;
    exit;
    }

    while ($row = pg_fetch_row($result)) {
    echo “Situação: $row[0] Descrição Situação: $row[1]”;
    echo “n”;
    }

    echo ‘encerrando a conexao.’;
    #encerrando a conexao
    $minhaConexao->close();

    echo ‘verificando a conexao apos close.’;
    #verificando a conexao apos close();
    $minhaConexao->statusCon();

    ?>

    erro recebido:

    include da classe.
    Instanciar o objeto conexao.
    Chamada ao metodo open que abra a conexao.
    Verificando o status da conexao.
    O sistema está conectado ao Banco: db_combustivel no Host: 10.72.31.114
    Executar consulta a base Postgre –>> SAFWEB

    Warning: pg_query() expects parameter 1 to be resource, null given in C:xampphtdocsLearningPHPindex.php on line 25

    >> Erro na consulta !

    acho que ele não reconheceu a conexão. Como fazer ?

    abraço ! aguardo uma dica se possivel.

    1. Rafael Clares

      Basta alterar a linha:
      $result = pg_query($con, “SELECT situacao, titulo_situacao FROM situacao_condutor”);

      Por:
      $result = pg_query(“SELECT situacao, titulo_situacao FROM situacao_condutor”);

      1. fernablues

        Putz! Valeu ! rs To começando agora com o PHP + postgre, estas dicas são fundamentais para agilizar e multiplicar o aprendizado…

        Mais uma vez parabens! e continue postando tutoriais e dicas vou estar antenado aqui …

        Abraço !

        1. Rafael Clares

          Flw valeu irmão!
          obs: procure ler (traduzir) as mensagens de erro, o erro dizia que “pg_query só espera um único parâmetro” e você estava passando 2.
          Abs,

  35. fernablues

    kkkkk tens razão e olha que domino bem o ingles.
    As vezes o erro ta na cara da gente e na pressa, não enxergamos nada rs

    1. Rafael Clares

      Lucas, não tem nada errado, acontece que não existe no caso do Fernando, a var $con.
      $result = pg_query($con, “SELECT situacao, titulo_situacao FROM situacao_condutor”);

      $con não existe no código dele o que existe é

      $minhaConexao então seria

      $result = pg_query($minhaConexao->con, “SELECT situacao, titulo_situacao FROM situacao_condutor”);

  36. Ricardo

    Olá, estou usando o ubuntu 11 e veja se estou certo:

    #/etc/php5/apache2$ ls

    conf.d php.ini

    Tenho de editar o php.ini, porém não acho em qual linha está:

    ;extension=php_pdo_pgsql.dll

    1. Rafael Clares

      Ricardo, nesse caso seria:
      ;extension=php_pgsql.dll

      Veja também se o postgresql está instalado;

  37. Aliana

    Rafael,
    Não sei se pode me ajudar, mas preciso de ajuda de como conectar o banco post gres no sistema zend framework.
    Atenciosamente
    Aliana

    1. Rafael Clares

      Aliana, creio ser mais fácil você procurar em algum forum Zend, aliás, na documentação Zend.

  38. carasco

    Mo paia.

  39. [email protected]

    Olá,Rafael, muito bom o seu tutorial, porém estou com uma duvida para a criação da classe construtor..

    function conecta($bd,$servidor,$porta,$usuario,$senha) {
    if($this->bd==”postgresql”) {
    $this->id = pg_connect($servidor,$porta,$usuario,$senha,$bd);
    }

    Onde eu coloco os meus dados do meu banco de dados dentro desta função?

    1. Rafael Clares

      Desculpe, não entendi bem sua pergunta.
      Não seria passado ao chamar a função?

      conecta(‘fotos’,’localhost’,543,’postgres’,’postgres’);

  40. murilo

    Estou com problemas para conecta postgre pgadmin III com php poderia me ajuda ?

    [email protected]

Os comentários estão encerrados.