Source for file TConnection.php
Documentation is available at TConnection.php
namespace
Adianti \
Database ;
* Singleton manager for database connections
* @author Pablo Dall'Oglio
* @copyright Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
* @license http://www.adianti.com.br/framework-license
private static $config_path ;
private static $conn_cache ;
* There'll be no instances of this class
private function __construct ( ) { }
* Opens a database connection
* @param $database Name of the database (an INI file).
* @return A PDO object if the $database exist,
* otherwise, throws an exception
* if the $database is not found
public static function open ( $database )
$dbinfo =
self :: getDatabaseInfo ( $database ) ;
// if the database doesn't exists, throws an exception
return self :: openArray ( $dbinfo ) ;
* Change database configuration Path
* @param $path Config path
self :: $config_path =
$path ;
* Opens a database connection from array with db info
* @param $db Array with database info
// read the database properties
$user = isset
( $db [ 'user' ] ) ?
$db [ 'user' ] :
NULL ;
$pass = isset
( $db [ 'pass' ] ) ?
$db [ 'pass' ] :
NULL ;
$name = isset
( $db [ 'name' ] ) ?
$db [ 'name' ] :
NULL ;
$host = isset
( $db [ 'host' ] ) ?
$db [ 'host' ] :
NULL ;
$type = isset
( $db [ 'type' ] ) ?
$db [ 'type' ] :
NULL ;
$port = isset
( $db [ 'port' ] ) ?
$db [ 'port' ] :
NULL ;
$char = isset
( $db [ 'char' ] ) ?
$db [ 'char' ] :
NULL ;
$flow = isset
( $db [ 'flow' ] ) ?
$db [ 'flow' ] :
NULL ;
$fkey = isset
( $db [ 'fkey' ] ) ?
$db [ 'fkey' ] :
NULL ;
$zone = isset
( $db [ 'zone' ] ) ?
$db [ 'zone' ] :
NULL ;
// each database driver has a different instantiation process
$port =
$port ?
$port :
'5432' ;
$conn =
new PDO ( " pgsql:dbname={$name } ;user={$user } ; password={$pass } ;host=$host ;port={$port } " ) ;
$conn -> exec ( " SET CLIENT_ENCODING TO '{$char } '; " ) ;
$port =
$port ?
$port :
'3306' ;
$options =
array ( PDO :: MYSQL_ATTR_INIT_COMMAND =>
" SET time_zone = '{$zone } ' " ) ;
$conn =
new PDO ( " mysql:host={$host } ;port={$port } ;dbname={$name } " , $user , $pass , $options ) ;
elseif ( $char ==
'utf8mb4' )
$zone =
$zone ?
" ;SET time_zone = '{$zone } ' " :
"" ;
$conn =
new PDO ( " mysql:host={$host } ;port={$port } ;dbname={$name } " , $user , $pass , array ( PDO :: MYSQL_ATTR_INIT_COMMAND =>
" SET NAMES utf8mb4{$zone } " )) ;
$zone =
$zone ?
" ;SET time_zone = '{$zone } ' " :
"" ;
$conn =
new PDO ( " mysql:host={$host } ;port={$port } ;dbname={$name } " , $user , $pass , array ( PDO :: MYSQL_ATTR_INIT_COMMAND =>
" SET NAMES utf8{$zone } " )) ;
$conn =
new PDO ( " sqlite:{$name } " ) ;
if ( is_null ( $fkey ) OR $fkey ==
'1' )
$conn -> query ( 'PRAGMA foreign_keys = ON' ) ; // referential integrity must be enabled
$db_string =
empty ( $port ) ?
" {
$host } :{
$name } " :
" {
$host } /{
$port } :{
$name } " ;
$charset =
$char ?
" ;charset={$char } " :
'' ;
$conn =
new PDO ( " firebird:dbname={$db_string } {$charset } " , $user , $pass ) ;
$conn -> setAttribute ( PDO :: ATTR_AUTOCOMMIT , 0 ) ;
$port =
$port ?
$port :
'1521' ;
$charset =
$char ?
" ;charset={$char } " :
'' ;
$tns = isset
( $db [ 'tns' ] ) ?
$db [ 'tns' ] :
NULL ;
$conn =
new PDO ( " oci:dbname={$tns } {$charset } " , $user , $pass ) ;
$conn =
new PDO ( " oci:dbname={$host } :{$port } /{$name } {$charset } " , $user , $pass ) ;
$conn -> query ( " ALTER SESSION SET NLS_DATE_FORMAT = '{$date } ' " ) ;
$conn -> query ( " ALTER SESSION SET NLS_TIMESTAMP_FORMAT = '{$time } ' " ) ;
$conn -> query ( " ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '{$nsep } ' " ) ;
$conn =
new PDO ( " sqlsrv:Server={$host } ,{$port } ;Database={$name } " , $user , $pass ) ;
$conn =
new PDO ( " sqlsrv:Server={$host } ;Database={$name } " , $user , $pass ) ;
$charset =
$char ?
" ;charset={$char } " :
'' ;
$conn =
new PDO ( " dblib:host={$host } :{$port } ;dbname={$name } {$charset } " , $user , $pass ) ;
$conn =
new PDO ( " dblib:host={$host } ;dbname={$name } {$charset } " , $user , $pass ) ;
$charset =
$char ?
" ;charset={$char } " :
'' ;
$conn =
new PDO ( " dblib:host={$host } :{$port } ;dbname={$name } {$charset } " , $user , $pass ) ;
$conn =
new PDO ( " dblib:host={$host } ;dbname={$name } {$charset } " , $user , $pass ) ;
$conn =
new PDO ( " sqlsrv:Server={$host } ,{$port } ;Database={$name } " , $user , $pass ) ;
$conn =
new PDO ( " sqlsrv:Server={$host } ;Database={$name } " , $user , $pass ) ;
$conn -> setAttribute ( PDO :: SQLSRV_ATTR_FETCHES_NUMERIC_TYPE , true ) ;
// define wich way will be used to report errors (EXCEPTION)
$conn -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION ) ;
$conn -> setAttribute ( PDO :: ATTR_CASE , PDO :: CASE_LOWER ) ;
* Returns the database information as an array
* @param $database INI File
$path =
empty ( self :: $config_path ) ?
'app/config' :
self :: $config_path ;
$filei =
" {
$path } /{
$database } .ini
" ;
$filep =
" {
$path } /{
$database } .php
" ;
if ( ! empty ( self :: $conn_cache [ $database ] ))
return self :: $conn_cache [ $database ] ;
// check if the database configuration file exists
// read the INI and retuns an array
self :: $conn_cache [ $database ] =
$ini ;
else if ( file_exists ( $filep ))
self :: $conn_cache [ $database ] =
$ini ;
* @param $database Database name
* @param $info Database connection information
self :: $conn_cache [ $database ] =
$info ;