11.15 - Trabalhando com PostgreSQL em PHP
editar
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'];