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

23/12/2016

0

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

Responder

Post mais votado

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/

Flaviano Martins

Flaviano Martins
Responder

Mais Posts

27/12/2016

Ismael Sousa

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
Responder

27/12/2016

Flaviano Martins

Poxa Ismael, complicou, mas tem ideia de qual caminho seguir?
Responder

27/12/2016

Ismael Sousa

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
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar