Buscar nome das colunas de uma instrução select postgresql

PostgreSQL

PHP

23/12/2016

Atualmente utilizo um script similar a esse para retornar os nomes das colunas e armazena em um array, o problema é que se a consulta sql retorna vazia acaba estourando um erro.
então preciso de um script que retornar os nome e tipo de dados (se possível) de todas as colunas de uma instrução select do Postgresql utilizando PHP OO e a biblioteca PDO

<?php

public function getColumnName(\\PDO $connection, int $id){

   $select = "select * from (select * from tableA a inner join tableB b on a.id = b.id where a.id = :id)";
   
   $stmt = $connection->prepare($select);
   $stmt->bindParam(':id', $id, \\PDO::PARAM_INT);
   $stmt->execute();
   $row = $stmt->fetch(\\PDO::FETCH_ASSOC);

   foreach (range(0, $stmt->columnCount() - 1) as $key) {

      columnName[] = $stmt->getColumnMeta($key)['name'];
   }

}
Ismael Sousa

Ismael Sousa

Curtidas 0

Melhor post

Flaviano Martins

Flaviano Martins

27/12/2016

Boa tarde Ismael, espero que os links te ajudem

https://webcentro.wordpress.com/2010/03/15/sql-para-selecionar-nomes-de-tabelas-e-colunas-no-postgres/

https://desenvolvedorinteroperavel.wordpress.com/2013/02/20/exibindo-informacoes-das-colunas-tabelas-e-banco-de-dados-no-postgresql-mysql-e-sql-server/
GOSTEI 1

Mais Respostas

Ismael Sousa

Ismael Sousa

23/12/2016

Boa tarde Ismael, espero que os links te ajudem

https://webcentro.wordpress.com/2010/03/15/sql-para-selecionar-nomes-de-tabelas-e-colunas-no-postgres/

https://desenvolvedorinteroperavel.wordpress.com/2013/02/20/exibindo-informacoes-das-colunas-tabelas-e-banco-de-dados-no-postgresql-mysql-e-sql-server/


Nó meu caso, não funciona!

Já havia cogitado usar os esquemas e funções internas do postgres, no entanto elas só funcionam em objetos/tabelas cadastrada no banco de dados e não tem como utiliza-las diretamente em select muito menos em select contendo joins um vens que o resultado do select não é uma tabela cadastrado no banco

De qualquer forma agradeço sr. Flaviano Martins
GOSTEI 0
Flaviano Martins

Flaviano Martins

23/12/2016

Poxa Ismael, complicou, mas tem ideia de qual caminho seguir?
GOSTEI 0
Ismael Sousa

Ismael Sousa

23/12/2016

Até mo momento a unica alternativa que encontrei é foi executar uma instrução SQL similar a essa:
SELECT *
  FROM (SELECT 1 AS metadata) md
        LEFT JOIN (SELECT u.idusuario,
                           u.loginbi,
                           u.nome,
                           u.dataultimoacesso
                      FROM public.usuariobi AS u
                     WHERE u.idsituacao IN(0)) AS usuario
        ON 1 = 1


Dessa forma mesmo que o resultado da consulta mais interna (a do LEFT JOIN) seja NULL a consulta externa (SELECT 1 AS metadata) garante que almenos a primeira coluna conterá valor, fazendo assim com que a consulto geral não retorne vazia.

O problema é que, quando a consulta do LEFT JOIN form muito complexa (com muitos sub selects e joins) ou com muitas colunas, o código Php ou o Banco de dados ou o Driver de conexão (não sei ao certo) entente que a consulta não possui resultado. E acaba dando erro no trecho de código do "foreach" do Php, alertando que não existem colunas
GOSTEI 0
POSTAR