Saltar para o conteúdo

Aplicativos em PHP/Trabalhando em PHP com/PostgreSQL

Origem: Wikilivros, livros abertos por um mundo aberto.

11.15 - Trabalhando com PostgreSQL em PHP

[editar | editar código-fonte]

Trabalhando com PostgreSQL via PHP

FUNÇÕES MAIS COMUNS DO POSTGRESQL

Usaremos:
banco - cliente
create table clientes(id serial primary key, nome char(45), data date);
INSERT INTO clientes VALUES (1, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (2, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (3, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (4, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (5, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (6, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (7, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (8, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (9, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (10, 'João Brito10', '2007-01-12');
INSERT INTO clientes VALUES (11, 'João Brito11', '2007-01-13');
INSERT INTO clientes VALUES (12, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (13, 'Jorge da Cunha', '2007-01-12');
INSERT INTO clientes VALUES (14, 'Jorge da Cunha', '2007-01-12');

Recomendações:

- Usar sempre os mesmos nomes de variáveis para mesmas funções. Exemplo: $dbcon para receber a conexão.
- Usar sempre as mesmas mensagens de erro para certos erros. Exemplo: 
  pg_query... 'Erro na consulta: ' . pg_last_error() não esquecer de passar a função do MySQL que retorna o erro

Conectar ao Banco do SGBD PostgreSQL


<?php
print "<h2>CONECTAR AO BANCO NO POSTGRESQL</h2>";
$bdcon = pg_connect("dbname=cliente");
//conecta a um banco de dados chamado "cliente"

$con_string = "host=localhost port=5432 dbname=cliente user=postgres password=postgres";
if(!$dbcon = pg_connect($con_string)) die ("Erro ao conectar ao banco<br>".pg_last_error($dbcon));
//coneta a um banco de dados chamado "cliente" na máquina "localhost" com um usuário e senha

Fechar a Conexão


print "<h2>FECHAR CONEXÃO COM O BANCO</H2>";
//pg_close($dbcon)


Executar Consulta SQL


print "<h2>EXECUTAR CONSULTA (QUALQUER CONSULTA SQL)</h2>";
$result = pg_query($dbcon, "SELECT id, nome FROM clientes");
if (!$result) {
  echo "Erro na consulta.<br>";
  exit;
}

while ($row = pg_fetch_row($result)) {
  echo "ID: $row[0]  Nome: $row[1]";
  echo "<br />\n";
}


Encontrar Registros Afetados


 print "<h2>NÚMERO DE REGISTROS AFETADOS (INSERT,DELETE E UPDATE)</h2>";
 $result = pg_query($dbcon, "INSERT INTO clientes (id, nome,data) VALUES (40, 'João Brito', '2007-03-25')");
 $cmdtuples = pg_affected_rows($result);
 if ($cmdtuples==0){
 	echo "Nenhum registro foi afetado.<br>";
 }elseif($cmdtuples==1){
 	echo $cmdtuples . " registro afetado.<br>";
 }else{	
 	echo $cmdtuples . " registros foram afetados.<br>";
 }

Inserir Registros de Array em Tabela


 print "<h2>INSERIR REGISTROS DE ARRAY EM TABELA</h2>";
    //$db = pg_connect("dbname=cliente") or die("Erro ao conectar ao banco");
    $rows = pg_copy_to($dbcon, 'clientes');
    pg_query($dbcon, "DELETE FROM clientes");
    pg_copy_from($dbcon, 'clientes', $rows);

Retornar Nome do Banco Conectado


print "<h2>RETORNAR NOME DO BANCO CONECTADO</h2>";
  echo pg_dbname(); // mary
  
   if ($dbcon) {
       print "<br>Conectado com sucesso ao banco: " . pg_dbname($dbcon) .
         " em " .  pg_host($dbcon) . "<br/>\n";
   } else {
       print pg_last_error($dbcon);
       exit;
   }


Retornar um registro em forma de array de campos


print "<h2>RETORNAR UM REGISTRO COM CAMPOS EM ARRAY</h2>";

while ($row=pg_fetch_row($result,$i)) {
  for($j=0; $j < count($row); $j++) {
     echo $row[$j] . "<BR>;nbsp;";
  }


Receber 1 registro na forma de array


print "<h2>RECEBER 1 REGISTRO COMO ARRAY</h2>";
$result = pg_query($dbcon, "SELECT id, nome FROM clientes");
if (!$result) {
  echo "Erro na consulta.\n";
  exit;
}

$arr = pg_fetch_array($result, 0, PGSQL_NUM);
echo $arr[0] . " <- Registro 1 ID<br>";
echo $arr[1] . " <- Registro 1 Nome<br>";

print "<h2>NOME DE CAMPO</h2>";
  $res = pg_query($dbcon, "select * from clientes where id = '23'");
  $i = pg_num_fields($res);
  for ($j = 0; $j < $i; $j++) {
     echo "campo $j<br>";
     $fieldname = pg_field_name($res, $j);
     echo "nome do campo: $fieldname<br>";
     echo "tamanho na tela: " . pg_field_prtlen($res, $fieldname) . " caracteres<br>";
     echo "tamanho no banco: " . pg_field_size($res, $j) . " bytes<br>";
     echo "tipo de dados: " . pg_field_type($res, $j) . " <br><br>";
  }


Número de Campo no Array de Campos de um Registro


print "<h2>NÚMERO DE CAMPO NO ARRAY DE CAMPOS DE UM REGISTRO</h2>";
  $res = pg_query($dbcon, "select id,nome,data from clientes where id = '18'");
  echo "Campo 'nome' é o campo número: ", pg_field_num($res, 'nome');


Tamanho Interno de Campo


print "<h2>TAMANHO INTERNO DE CAMPO</h2>";
  $res = pg_query($dbcon, "select * from clientes where id = '23'");
  $i = pg_num_fields($res);
  for ($j = 0; $j < $i; $j++) {
     echo "campo $j<br>";
     $fieldname = pg_field_name($res, $j);
     echo "nome do campo: $fieldname<br>";
     echo "tamanho na tela: " . pg_field_prtlen($res, $fieldname) . " caracteres<br>";
     echo "tamanho no banco: " . pg_field_size($res, $j) . " bytes<br>";
     echo "tipo de dados: " . pg_field_type($res, $j) . " <br><br>";
  }


Tipo de Dados de Campo


print "<h2>TIPO DE DADOS DE CAMPO</h2>";
  // Assume 'title' is a varchar type
  $res = pg_query($dbcon, "select nome from clientes where id = '11'");
  echo "Tipo do campo nome: ", pg_field_type($res, 0);  


Última Mensagem de Erro da Conexão


print "<h2>ÚLTIMA MENSAGEM DE ERRO DA CONEXÃO</h2>";
  // Query that fails
  $res = pg_query($dbcon, "select * from tabelaquenaoexiste"); 
  echo pg_last_error($dbcon);


Meta Dados de Tabela


print "<h2>META DADOS DE TABELA (EXPERIMENTAL)</h2>";
  $meta = pg_meta_data($dbcon, 'clientes');
  if (is_array($meta)) {
     echo '<pre>';
     var_dump($meta);
     echo '</pre>';
  }


Número de Campos de Consulta


print "<h2>NÚMERO DE CAMPOS</h2>";
$num = pg_num_fields($result);
echo $num . " campos(s) retornados.<br>";      


Número de Registros


print "<h2>NÚMERO DE REGISTROS</h2>";
$rows = pg_num_rows($result);
echo $rows . " registro(s) retornados.<br>";


Codificação do Cliente


print "<h2>RETORNAR CODIFICAÇÃO DO CLIENTE</h2>";
$encoding = pg_client_encoding($dbcon);
echo "A codificação do cliente é: ", $encoding, "<br>";


Alterar Codificação do Cliente


print "<h2>ALTERAR CODIFICAÇÃO DO CLIENTE</h2>";
//$dbcon = pg_pconnect("dbname=cliente");
if (!$dbcon) {
  echo "Erro na conexão.<br>";
  exit;
}

// Configurar a codificação do cliente para UNICODE. Dados devem ser automaticamente convertidos
// da codificação do backend para a do frontend.
/* Valores possíveis SQL_ASCII, EUC_JP, EUC_CN, EUC_KR, EUC_TW, UNICODE, MULE_INTERNAL, 
LATINX (X=1...9), KOI8, WIN, ALT, SJIS, BIG5, WIN1250. */
pg_set_client_encoding($dbcon, LATIN1);
$result = pg_query($dbcon, "SELECT id,nome FROM clientes");
if (!$result) {
  echo "Erro na consulta.<br>";
  exit;
}

// Escrever dados em UTF-8
while ($row = pg_fetch_row($result)) {
  echo "ID: $row[0]  Nome: $row[1]";
  echo "<br/>";
}


Versão do PostgreSQL


print "<h2>VERSÃO DO POSTGRESQL</h2>";
print "Retorna um array com versão do cliente, protocolo e servidor (quando disponíveis)<br>";
    
  $v = pg_version($dbcon); 
  echo $v['client'];