IESA
Programa de Feedback Gerencial y Liderazgo
 Todo Estructuras de Datos Archivos Funciones Variables
Database.class.php
Ir a la documentación de este archivo.
00001 <?php
00002 
00009 class Database{
00010 
00019     private static $instance = null ;
00020 
00028         private function __construct(){}
00029 
00037         private function __clone(){}
00038 
00052     public static function getInstance ( ) {
00053 
00054         if ( self :: $instance )
00055                         return self :: $instance;
00056 
00057                 try{
00058                 self::$instance = new PDO (
00059                 Config::get('database/dsn'),
00060                 Config::get('database/user'),
00061                 Config::get('database/password'),
00062                 Config::get('database/db_option')
00063             );
00064 
00065                 foreach ( Config::get('database/db_attribute') as $k => $v )
00066                 self :: $instance->setAttribute(
00067                         constant ( "PDO::{$k}" ),
00068                         constant ( "PDO::{$v}" )
00069                 );
00070 
00071                         if( self::$instance->getAttribute( constant( 'PDO::ATTR_DRIVER_NAME' ) ) == 'oci' ){
00072                                 self::$instance->exec( "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD hh24:mi:ss'" );
00073                                 self::$instance->exec( "ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD hh24:mi:ss'" );
00074                                 self::$instance->exec( "ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD hh24:mi:ss'" );
00075                         }
00076 
00077                 }catch( PDOException $e ){
00078                         throw new Exception( $e->getMessage(), $e->getCode() );
00079                 }
00080 
00081         return self :: $instance ;
00082     }
00083 
00088         public static function lastInsertId( $seq='' ){
00089                 $db = self::getInstance(  );
00090                 if( ($db->getAttribute( constant( 'PDO::ATTR_DRIVER_NAME' ) ) == 'oci') ){
00091                         $result = $db->query( "SELECT {$seq}.currval as lastid FROM dual" )->fetch(  );
00092                         return $result['lastid'];
00093                 }else
00094                         return $db->lastInsertId(  );
00095         }
00096 
00101         public static function driver(  ){
00102                 return self::getInstance(  )->getAttribute( constant( 'PDO::ATTR_DRIVER_NAME' ) );
00103         }
00104 
00105 
00110         public static function limit( $query, $limit, $offset ){
00111                 $db = self::getInstance(  );
00112                 return ( ($db->getAttribute( constant( 'PDO::ATTR_DRIVER_NAME' ) ) == 'oci') ) ?
00113                         "SELECT * FROM (SELECT a.*, ROWNUM rnum FROM ( {$query} ) a WHERE ROWNUM <= {$limit}) WHERE rnum >= {$offset}"
00114                 :
00115                         $query." LIMIT {$limit} OFFSET {$offset}";
00116         }
00117 
00118 
00123         public static function count( $table, $where=NULL ){
00124                 $db = self::getInstance(  );
00125 
00126                 $consulta = $db->prepare(
00127                         "SELECT count(*) as rowcount FROM {$table}".( $where && isset( $where['where'] ) ? " WHERE {$where['where']}" : '' )
00128                 );
00129 
00130                 $consulta->execute( $where && isset( $where['data'] ) ? $where['data'] : array(  ) );
00131 
00132                 $resultado = $consulta->fetch(PDO::FETCH_ASSOC);
00133                 $consulta->closeCursor(  ); unset( $consulta );
00134 
00135                 return !$resultado ? 0 : $resultado['rowcount'];
00136         }
00137 
00142         public static function alterDate( $format='YYYY-MM-DD hh24:mi:ss' ){
00143                 $db = self::getInstance(  );
00144                 if( $db->getAttribute( constant( 'PDO::ATTR_DRIVER_NAME' ) ) == 'oci' ){
00145                         $db->exec( "ALTER SESSION SET NLS_DATE_FORMAT = '{$format}'" );
00146                         $db->exec( "ALTER SESSION SET NLS_TIMESTAMP_FORMAT = '{$format}'" );
00147                         $db->exec( "ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = '{$format}'" );
00148                 }
00149 
00150         }
00151 
00152 }