classe_bdexplorer.php
3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
* Classe bdexplorer
*
* Contem funcoes que acessam o sistema de metadados estatisticos e o banco de dados de determinada conexao
* Permite listagens apenas quando o esquema estiver em ms_configura/i3geoEsquemasWL
*
*/
namespace i3geo\classesphp\bdexplorer;
use PDO;
class Bdexplorer{
/**
* Nome do esquema no banco de dados utilizado para armazenar as tabelas
* do sistema de admnistracao. Obtido de ms_configura.php
*/
public $esquemaadmin;
/**
* Objeto PDO obtido com new PDO com direito de leitura no banco de dados de administracao
*/
public $dbh;
/**
* Indica se e necessario converter para UTF strings obtidas do banco de administracao
*/
public $convUTF;
/**
* Pasta temporaria utilizada pelo mapserver
*/
public $dir_tmp;
/**
* Pasta onde e feito o cache de imagens do i3Geo
*/
public $nomecache;
/**
* Lista branca de esquemas permitidos
*/
public $i3geoEsquemasWL;
/**
* Construtor
* Faz o include de conexao.php que por sua vez faz o include de i3geo/ms_configura.php
*/
function __construct($loc="",$dbh=""){
if(empty($loc)){
$loc = dirname(__FILE__)."/..";
}
include($loc."/ms_configura.php");
//vem do include
$this->dir_tmp = $dir_tmp;
$this->locaplic = $locaplic;
$this->base = $base;
$this->esquemaadmin = "";
if(!empty($esquemaadmin)){
$this->esquemaadmin = str_replace(".","",$esquemaadmin).".";
}
if(!isset($i3geoEsquemasWL) || !is_array($i3geoEsquemasWL)){
$this->i3geoEsquemasWL = array();
} else {
$this->i3geoEsquemasWL = $i3geoEsquemasWL;
}
//se a conexao nao vier como parametro, cria uma nova
if(is_array($dbh)){
$this->dbh = $this->conecta($dbh);
} else {
$this->dbh = $dbh;
}
}
function __destruct(){
$this->fechaConexao();
}
function conecta($c){
$dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
return $dbh;
}
/**
* Fecha a conexao com o banco de dados de administracao
*/
function fechaConexao(){
$this->dbh = null;
}
function listaDeEsquemas(){
return $this->i3geoEsquemasWL;
}
function validaEsquemas($listaDeEsquemas){
$novaLista = array();
foreach($listaDeEsquemas as $e){
if(in_array($e,$this->i3geoEsquemasWL)){
$novaLista[] = $e;
}
}
return $novaLista;
}
function validaEsquema($esquema){
$lista = $this->validaEsquemas(array($esquema));
if(count($lista) == 0){
return false;
} else {
return true;
}
}
function listaDeTabelas($esquema){
$tabelas = array();
if($this->validaEsquema($esquema) == true){
$sql = "SELECT table_name as tabela FROM information_schema.tables where table_schema = '$esquema' AND table_schema NOT LIKE 'i3geo%' AND table_schema NOT LIKE 'pg_%' AND table_schema NOT LIKE '%_schema%'";
$res = $this->execSQL($sql);
foreach($res as $r){
$tabelas[] = $r["tabela"];
}
}
return $tabelas;
}
function listaDeColunas($esquema,$tabela){
$colunas = array();
if($this->validaEsquema($esquema) == true){
$sql = "SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$esquema' and table_name = '$tabela'";
$res = $this->execSQL($sql);
foreach($res as $r){
$colunas[] = $r["coluna"];
}
}
return $colunas;
}
function execSQL($sql){
$sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql);
try {
$q = $this->dbh->query($sql,PDO::FETCH_ASSOC);
$q = $q->fetchAll();
return $q;
}
catch (PDOException $e) {
return "Error!: ";
}
}
}
?>