Advertisement
Guest User

ConFire.class.php

a guest
Aug 28th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.02 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * ConnFire.class [ CONEXÃO FIREBIRD ]
  5.  * Classe abstrata de conexão. Padrão SingleTon.
  6.  * Retorna um objeto PDO pelo método estático getConn();
  7.  */
  8. class ConnFire {
  9.  
  10.     private static $User = 'SYSDBA';
  11.     private static $Pass = 'masterkey';
  12.     //private static $Dbsa = 'cisel.ddns.net:D:\ADV\ADVDados\CISEL.GD';
  13.     private static $Dbsa = 'c:\CISEL.GD';
  14.  
  15.     /** @var PDO */
  16.     private static $Connect = null;
  17.     private static $instance = null;
  18.  
  19.     /**
  20.      * Conecta com o banco de dados com o pattern singleton.
  21.      * Retorna um objeto PDO!
  22.      */
  23.     private static function Conectar() {
  24.         try {
  25.             if (self::$Connect == null):
  26.                 $dsn = 'firebird:dbname=' . self::$Dbsa;
  27.                 self::$Connect = new PDO($dsn, self::$User, self::$Pass);
  28.                 self::$Connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  29.             endif;
  30.         } catch (PDOException $e) {
  31.             PHPErro($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
  32.             die;
  33.         }
  34.  
  35.         return self::$Connect;
  36.     }
  37.  
  38.     /** Retorna um objeto PDO Singleton Pattern. */
  39.     public static function getConn() {
  40.         return self::Conectar();
  41.     }
  42.  
  43.     /**
  44.      * Construtor do tipo protegido previne que uma nova instância da
  45.      * Classe seja criada atravês do operador `new` de fora dessa classe.
  46.      */
  47.     private function __construct() {
  48.        
  49.     }
  50.  
  51.     /**
  52.      * Método clone do tipo privado previne a clonagem dessa instância
  53.      * da classe
  54.      *
  55.      * @return void
  56.      */
  57.     private function __clone() {
  58.        
  59.     }
  60.  
  61.     /**
  62.      * Método unserialize do tipo privado para previnir que desserialização
  63.      * da instância dessa classe.
  64.      *
  65.      * @return void
  66.      */
  67.     private function __wakeup() {
  68.        
  69.     }
  70.  
  71.     public static function getInstance() {
  72.         if (self::$instance == null) {
  73.             self::$instance = new ConnFire();
  74.         }
  75.         return self::$instance;
  76.     }
  77.  
  78.     /**
  79.      * save verifica se no array associativo passado
  80.      * tem a chave primária e não está vazia
  81.      * se tiver, então realiza o update, se não realiza o insert
  82.      * em todas as situações a chave primária é retornada
  83.      * @param type $data, um array associativo, onde
  84.      * as chaves possum o mesmo nome das colunas da tabela
  85.      * e o valor será inserido nas colunas da mesma
  86.      * @throws Exception
  87.      */
  88.     public function save($data, $tabela, $chavePrimaria) {
  89.         $arrayKeys = array_keys($data);
  90.         $arrayValues = array_values($data);
  91.         $operacao = 'I';
  92.         if (in_array($chavePrimaria, $arrayKeys) && !empty($arrayValues[0])) {
  93.             $operacao = 'U';
  94.             $valorChavePrimaria = $arrayValues[0];
  95.             unset($arrayKeys[0]);
  96.             unset($arrayValues[0]);
  97.         }
  98.         $qtd = count($arrayKeys);
  99.         try {
  100.  
  101.             $values = "";
  102.             $campos = "";
  103.             $totalCampos = count($arrayKeys);
  104.             $i = 0;
  105.             if ($operacao == 'I') {
  106.                 foreach ($arrayKeys as $indice => $nomeCampoBase) {
  107.                     $valorCampo = $arrayValues[$indice];
  108.  
  109.                     $campos .= "{$nomeCampoBase}";
  110.                     if (is_float($valorCampo) || is_integer($valorCampo)) {
  111.                         $values .= " {$valorCampo} ";
  112.                     } else {
  113.                         $values .= " '{$valorCampo}' ";
  114.                     }
  115.                     if ($totalCampos > 1 && $i < $totalCampos - 1) {
  116.                         $values .= ",";
  117.                         $campos .= ",";
  118.                     }
  119.                     $i++;
  120.                 }
  121.             } else {
  122.                 foreach ($arrayKeys as $indice => $nomeCampoBase) {
  123.                     $valorCampo = $arrayValues[$indice];
  124.                     if (is_float($valorCampo) || is_integer($valorCampo)) {
  125.                         $values .= "{$nomeCampoBase}={$valorCampo} ";
  126.                     } else {
  127.                         $values .= "{$nomeCampoBase}='{$valorCampo}' ";
  128.                     }
  129.  
  130.                     if ($totalCampos > 1 && $i < $totalCampos - 1) {
  131.                         $values .= ",";
  132.                     }
  133.                     $i++;
  134.                 }
  135.             }
  136.  
  137.             if ($operacao == 'I') {
  138.                 $stringSql = "INSERT INTO {$tabela} ({$campos}) VALUES({$values}) ";
  139.                 //echo $stringSql;die;
  140.                 $this->getConection()->query($stringSql)->execute();
  141.                 return 10;
  142.             } else {
  143.                 $stringSql = "UPDATE  {$tabela} SET {$values} WHERE {$chavePrimaria}={$valorChavePrimaria} ";
  144.  
  145.                 $this->getConection()->query($stringSql);
  146.                 return 10;
  147.             }
  148.         } catch (Exception $ex) {
  149.             throw new Exception("Falha ao inserir dados:" . $ex->getMessage());
  150.         }
  151.     }
  152.  
  153.     public function getConection() {
  154.         return self::Conectar();
  155.     }
  156.  
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement