Aplicativos em PHP/Integração do PHP com SGBDs/PostgreSQL
Aspeto
Conectar ao Banco do SGBD 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
<?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> == FECHA == R 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>"; } <pre> <h2>Inserir Registros de Array em Tabela</h2> <pre> 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 '
';
}
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'];