|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
include "Logger.php";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Classe de Conexao com banco de dados.
|
|
|
|
|
*
|
|
|
|
|
* - Criar uma conexao de forma mais r<EFBFBD>pida.
|
|
|
|
|
* - Gerar logs da conexao.
|
|
|
|
|
* - Fazer consultas mais r<EFBFBD>pidas.
|
|
|
|
|
*
|
|
|
|
|
* @author Lucas Awade
|
|
|
|
|
*/
|
|
|
|
|
class Conexao {
|
|
|
|
|
|
|
|
|
|
/** @conexao */
|
|
|
|
|
private $connection;
|
|
|
|
|
private $credentials = array();
|
|
|
|
|
|
|
|
|
|
/** @DB */
|
|
|
|
|
private $host;
|
|
|
|
|
private $port;
|
|
|
|
|
private $database;
|
|
|
|
|
private $user;
|
|
|
|
|
private $password;
|
|
|
|
|
|
|
|
|
|
/** @Logs */
|
|
|
|
|
private $logger;
|
|
|
|
|
|
|
|
|
|
const FILE_DB = "/var/www/html/include/bd";
|
|
|
|
|
|
|
|
|
|
function __construct($host = null, $user = null, $password = null, $port = null, $database = null) {
|
|
|
|
|
$this->logger = new Logger('ConexaoDB_' . ($host ? str_replace(".", "", $host) : 'local'), true, '');
|
|
|
|
|
$this->logger->debug("Criando instancia de Conexao");
|
|
|
|
|
|
|
|
|
|
if ($host && $port && $user && $password) {
|
|
|
|
|
$this->host = $host;
|
|
|
|
|
$this->port = $port;
|
|
|
|
|
$this->database = $database;
|
|
|
|
|
$this->user = $user;
|
|
|
|
|
$this->password = $password;
|
|
|
|
|
} else {
|
|
|
|
|
$this->filedb();
|
|
|
|
|
$this->host = $this->credentials['host_db'];
|
|
|
|
|
$this->port = $this->credentials['porta_db'];
|
|
|
|
|
$this->database = $this->credentials['base_db'];
|
|
|
|
|
$this->user = $this->credentials['usuario'];
|
|
|
|
|
$this->password = $this->credentials['senha'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Pega as informacoes das credenciais no arquivos padrao "bd";
|
|
|
|
|
*/
|
|
|
|
|
private function filedb() {
|
|
|
|
|
if (file_exists(self::FILE_DB)) {
|
|
|
|
|
$contents = fopen(self::FILE_DB, 'r');
|
|
|
|
|
while (!feof($contents) && $contents) {
|
|
|
|
|
$str = fgets($contents);
|
|
|
|
|
$dados = explode('=', $str);
|
|
|
|
|
$this->credentials[strtolower($dados[0])] = str_replace('"', '', $dados[1]);
|
|
|
|
|
}
|
|
|
|
|
fclose($contents);
|
|
|
|
|
$this->credentials = array_filter($this->credentials);
|
|
|
|
|
$this->logger->debug("Credenciais banco de dados: " . print_r($this->credentials, true), debug_backtrace());
|
|
|
|
|
} else {
|
|
|
|
|
$this->logger->error("Nao foi possivel encontrar o arquivo 'bd' em " . self::FILE_DB);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
|
|
|
#### POSTGRESQL ####
|
|
|
|
|
########################################################################
|
|
|
|
|
|
|
|
|
|
public function quotedStr($str) {
|
|
|
|
|
return sprintf("'%s'", pg_escape_string(trim($str)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Cria uma instancia de conexao com o PostgreSQL e mant<EFBFBD>m um conexao aberta.
|
|
|
|
|
* @return void
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
private function postgresql() {
|
|
|
|
|
$this->logger->error("Conexao com " . __FUNCTION__, debug_backtrace());
|
|
|
|
|
if ($this->connection) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
if ($this->host && $this->user && $this->password && $this->port && $this->database) {
|
|
|
|
|
$this->connection = pg_connect("host={$this->host} port={$this->port} dbname={$this->database} user={$this->user} password={$this->password}");
|
|
|
|
|
$this->pg_get_errors();
|
|
|
|
|
$this->logger->success("Conexao realizada!", debug_backtrace());
|
|
|
|
|
} else {
|
|
|
|
|
$this->logger->error("Autenticacao incompleta! Verifique os dados passados de conexao.", debug_backtrace());
|
|
|
|
|
throw new Exception($this->logger->getText());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verifica erros de consultas e erros para serem gerados manualmente.
|
|
|
|
|
* @param string $error
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
private function pg_get_errors($error = null) {
|
|
|
|
|
if (pg_last_error()) {
|
|
|
|
|
$this->logger->error("Error PostgreSQL [ {$this->host} ] ", debug_backtrace());
|
|
|
|
|
$message = $error ? "Message: " . $error . " | Error DB: " . pg_last_error() : "Error DB: " . pg_last_error();
|
|
|
|
|
$this->logger->error($message, debug_backtrace());
|
|
|
|
|
throw new Exception($message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Realiza a consulta no banco de dados com o tipo de retorno.
|
|
|
|
|
*
|
|
|
|
|
* - Busca com a conexao aberta, caso tenha uma sessao encerrada tentar<EFBFBD>
|
|
|
|
|
* recria-la.
|
|
|
|
|
*
|
|
|
|
|
* @param string $query
|
|
|
|
|
* @param string $type
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function pg_execute($query, $type = "ALL") {
|
|
|
|
|
try {
|
|
|
|
|
$this->postgresql();
|
|
|
|
|
$result = pg_query($query);
|
|
|
|
|
$this->pg_get_errors();
|
|
|
|
|
|
|
|
|
|
if ($this->selectQuery($query)) {
|
|
|
|
|
switch (strtoupper($type)) {
|
|
|
|
|
case "ALL":
|
|
|
|
|
return pg_fetch_all($result);
|
|
|
|
|
case "ASSOC":
|
|
|
|
|
return pg_fetch_assoc($result);
|
|
|
|
|
case "ROW":
|
|
|
|
|
return pg_fetch_row($result);
|
|
|
|
|
case "ARRAY":
|
|
|
|
|
return pg_fetch_array($result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return !$result ? false : true;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
$this->logger->error($ex->getMessage());
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
|
|
|
#### MySQL ####
|
|
|
|
|
########################################################################
|
|
|
|
|
|
|
|
|
|
private function selectQuery($query) {
|
|
|
|
|
$type = explode(' ', $query);
|
|
|
|
|
if (trim(strtoupper($type[0])) == 'SELECT') {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Cria uma instancia de conexao com o PostgreSQL e mant<EFBFBD>m um conexao aberta.
|
|
|
|
|
* @return void
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
private function mysql() {
|
|
|
|
|
$this->logger->error("Conexao com " . __FUNCTION__, debug_backtrace());
|
|
|
|
|
if ($this->connection) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($this->host && $this->user && $this->password && $this->port && $this->database) {
|
|
|
|
|
$this->connection = mysql_connect($this->host, $this->user, $this->password);
|
|
|
|
|
mysql_select_db($this->database, $this->connection);
|
|
|
|
|
|
|
|
|
|
$this->mysql_get_errors();
|
|
|
|
|
$this->logger->success("Conexao realizada!", debug_backtrace());
|
|
|
|
|
} else {
|
|
|
|
|
$this->logger->error("Autenticacao incompleta! Verifique os dados passados de conexao.", debug_backtrace());
|
|
|
|
|
throw new Exception($this->logger->getText());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verifica erros de consultas e erros para serem gerados manualmente.
|
|
|
|
|
* @param string $error
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
private function mysql_get_errors($error = null) {
|
|
|
|
|
if (mysql_error()) {
|
|
|
|
|
$this->logger->error("Error MySQL [ {$this->host} ] ", debug_backtrace());
|
|
|
|
|
$message = $error ? "Message: " . $error . " | Error DB: " . mysql_error() : "Error DB: " . mysql_error();
|
|
|
|
|
$this->logger->error($message, debug_backtrace());
|
|
|
|
|
throw new Exception($message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Realiza a consulta no banco de dados com o tipo de retorno.
|
|
|
|
|
*
|
|
|
|
|
* - Busca com a conexao aberta, caso tenha uma sessao encerrada tentar<EFBFBD>
|
|
|
|
|
* recria-la.
|
|
|
|
|
*
|
|
|
|
|
* @param string $query
|
|
|
|
|
* @param string $type
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function mysql_execute($query, $type = "ARRAY") {
|
|
|
|
|
try {
|
|
|
|
|
$this->mysql();
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
switch (strtoupper($type)) {
|
|
|
|
|
case "INSERT":
|
|
|
|
|
$result = mysql_insert_id();
|
|
|
|
|
break;
|
|
|
|
|
case "ASSOC":
|
|
|
|
|
$result = mysql_fetch_assoc($result);
|
|
|
|
|
break;
|
|
|
|
|
case "ROW":
|
|
|
|
|
$result = mysql_fetch_row($result);
|
|
|
|
|
break;
|
|
|
|
|
case "ARRAY":
|
|
|
|
|
$result = mysql_fetch_array($result);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$this->mysql_get_errors();
|
|
|
|
|
return $result;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
$this->logger->error($ex->getMessage());
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
########################################################################
|
|
|
|
|
#### SISTEMA DE LOGS GERADOS ####
|
|
|
|
|
########################################################################
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Metodo para ativar e desativar o registros de log.
|
|
|
|
|
* @param bool $active
|
|
|
|
|
*/
|
|
|
|
|
function logger($active = false) {
|
|
|
|
|
$this->logger->setLogger($active);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|