Accueil > > > ABSTRACTION PDO
ABSTRACTION PDO
Information sur la source
Description
Bonjour, Cette classe permet d'étendre le module PDO. La classe PdoManager ouvre la connexion en fonction de l'adapter passé. Toutes les méthodes de PDO sont accessibles via la classe PdoManager grace a la fonction __call Ex : appel de la méthode query $oPdo = new DaoFactory::factory($aParams); $oPdo->query('SELECT tata_yoyo FROM chapeau'); L'avantage est d'avoir des nom de méthode standardisé pour récupérer par exemple la liste des tables, la description des tables. Dans les classes PdoMysql et PdoPgsl on peut facilement ajouter des méthodes qui demandes des syntaxes SQL différentes selon les SGBD Pour rajouter le support d'autre bdd il suffit par exemple de créer une class PdoMssql et d'y implémenter les méthodes obligatoires. Voila c'est pas une classe très compliqué mais elle me sert beaucoup. J'attend vaut critique et idées d'amélioration
Source
- <?php
- /**
- * @abstract
- * @name PdoManager
- * @author aberthelot
- * @since 11/10/2008
- * @package Dao::Pdo
- * @version 4.0.0 - AXB - 11/10/2008
- * @version 4.0.1 - AXB - 14/11/2008 - Déportation de la méthode connect dans les classes filles
- */
- abstract class PdoManager
- {
- /**
- * Host de connexion
- *
- * @access protected
- * @var string
- */
- protected $_sHostname;
-
- /**
- * Nom d'utilisateur
- *
- * @access protected
- * @var string
- */
- protected $_sUsername;
-
- /**
- * Password de connexion
- *
- * @access protected
- * @var string
- */
- protected $_sPassword;
-
- /**
- * Adapter connexion
- * Ex : mysql, pgsql
- *
- * @access protected
- * @var string
- */
- protected $_sAdapter;
-
- /**
- * Nom de la base de données
- *
- * @access protected
- * @var string
- */
- protected $_sBasename;
-
- /**
- * Port de connexion
- *
- * @access protected
- * @var integer
- */
- protected $_iPort;
-
- /**
- * Encodage de la base de données
- *
- * @access protected
- * @var string
- */
- protected $_sEncoding;
-
- /**
- * Connexion base de données
- *
- * @access protected
- * @var object
- */
- protected $_oPdoInstance = null;
-
- /**
- * Constructeur de la classe
- * Initialise les variables de connexion
- * Test si l'extension pdo est chargée
- *
- * @param array $aParams
- * @return void
- */
- public function __construct($aParams)
- {
- $this->_sAdapter = ( isset($aParams['adapter']) ) ? $aParams['adapter'] : null;
- $this->_sHostname = ( isset($aParams['hostname']) ) ? $aParams['hostname'] : null;
- $this->_sPassword = ( isset($aParams['password']) ) ? $aParams['password'] : null;
- $this->_sUsername = ( isset($aParams['username']) ) ? $aParams['username'] : null;
- $this->_sBasename = ( isset($aParams['basename']) ) ? $aParams['basename'] : null;
- $this->_iPort = ( isset($aParams['port']) ) ? $aParams['port'] : null;
- $this->_sEncoding = ( isset($aParams['encoding']) ) ? $aParams['encoding'] : null;
-
- if( false === $this->checkExtensionPDo() )
- {
- throw new Exception('L\'extension "pdo" ou "pdo_'.$this->_sAdapter.'" ne sont pas activées.', E_ERROR);
- }
- }
-
- /**
- * Connexion à la base de données
- * Passe la gestion des erreurs en exception
- * Si mysql on active l'émulation des requêtes préparés
- * Initialisation de l'encodage de la connexion
- *
- * @access public
- * @return void
- */
- public function connect()
- {
- if( is_null($this->_oPdoInstance) )
- {
- $this->_oPdoInstance = new PDO($this->_getDsn(), $this->_sUsername, $this->_sPassword);
- $this->_oPdoInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
- if( $this->_oPdoInstance->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql' )
- {
- $this->_oPdoInstance->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
- }
-
- $this->_setConnectionEncoding();
- }
- }
-
- /**
- * Mapping des fonction PDO
- *
- * @access public
- * @param string $sMethod
- * @param array $aArguments
- * @return mixed|boolean
- */
- public function __call($sMethod, $aArguments)
- {
- if( method_exists(get_class($this->_oPdoInstance), $sMethod) )
- {
- return call_user_func_array(array($this->_oPdoInstance, $sMethod), $aArguments);
- }
-
- return false;
- }
-
- /**
- * Retourne la liste des drivers disponible
- *
- * @static
- * @access public
- * @return array
- */
- public static function getAvailableDrivers()
- {
- return PDO::getAvailableDrivers();
- }
-
- /**
- * Ferme la connexion à la base de données
- *
- * @access public
- * @return void
- */
- public function close()
- {
- $this->_oPdoInstance = null;
- }
-
- /**
- * Test si l'extension pdo est activé
- *
- * @access private
- * @return boolean
- */
- private function checkExtensionPDo()
- {
- if ( extension_loaded('pdo') )
- {
- if( extension_loaded('pdo_'.$this->_sAdapter) )
- {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Retourne le driver de connexion
- *
- * @abstract
- * @access protected
- * @return void
- */
- abstract protected function _getDsn();
-
- /**
- * Modifie l'encodage de la connexion
- *
- * @abstract
- * @access protected
- * @return void
- */
- abstract protected function _setConnectionEncoding();
-
- /**
- * Retourne la description de la table
- *
- * @abstract
- * @access public
- * @param string $sNameTable
- * @param string $sSchema
- * @return array
- */
- abstract public function describe($sNameTable, $sSchema = null);
-
- /**
- * Retourne la liste des tables de la base
- *
- * @abstract
- * @access public
- * @return array
- */
- abstract public function listTable();
- }
- ?>
-
-
- <?php
- /**
- * @name PdoMysql
- * @author aberthelot
- * @since 11/10/2008
- * @package Dao::Pdo
- * @version 4.0.0 - AXB - 11/10/2008
- */
- class PdoMysql extends PdoManager
- {
- /**
- * Constructeur de la classe
- * Initialise les variables de connexion
- * Test si l'extension pdo est chargée
- *
- * @param array $aParams
- * @return void
- */
- public function __construct($aParams)
- {
- parent::__construct($aParams);
- }
-
- /**
- * Retourne la description de la table
- *
- * @access public
- * @param string $sNameTable
- * @param string $sSchema
- * @return array
- */
- public function describe($sNameTable, $sSchema = null)
- {
- $aData = array();
- $sSql = 'SHOW COLUMNS FROM '.$sNameTable.';';
- $aRes = $this->query($sSql);
- $aRows = $aRes->fetchAll();
-
- foreach($aRows as $iKey => $sValue)
- {
- $aData[$sValue['Field']]['name'] = $sValue['Field'];
- $aData[$sValue['Field']]['type'] = $sValue['Type'];
- $aData[$sValue['Field']]['null'] = ($sValue['Null'] == 'YES') ? true : false;
- $aData[$sValue['Field']]['key'] = ($sValue['Key'] == 'PRI') ? true : false;
- $aData[$sValue['Field']]['default'] = $sValue['Default'];
- $aData[$sValue['Field']]['extra'] = $sValue['Extra'];
- }
-
- return $aData;
- }
-
- /**
- * Retourne la liste des tables de la base
- *
- * @access public
- * @return array
- */
- public function listTable()
- {
- $aData = array();
- $sSql = 'SHOW TABLES;';
- $aRes = $this->query($sSql);
- $aRows = $aRes->fetchAll();
-
- foreach($aRows as $iKey => $sValue)
- {
- $aData[$iKey] = $sValue['Tables_in_'.$this->_sBasename];
- }
-
- return $aData;
- }
-
- /**
- * Retourne le driver de connexion
- *
- * @abstract
- * @access protected
- * @return void
- */
- protected function _getDsn()
- {
- return 'mysql:host='.$this->_sHostname.';dbname='.$this->_sBasename;
- }
-
- /**
- * Modifie l'encodage de la connexion
- *
- * @access protected
- * @return void
- */
- protected function _setConnectionEncoding()
- {
- if(! is_null($this->_sEncoding) )
- {
- $sStmt = $this->_oPdoInstance->prepare('SET CHARACTER SET ?');
- $this->execute(array($this->_sEncoding));
- }
- }
- }
- ?>
-
-
- <?php
- /**
- * @name PdoPgsql
- * @author aberthelot
- * @since 11/10/2008
- * @package Dao::Pdo
- * @version 4.0.0 - AXB - 11/10/2008
- */
- class PdoPgsql extends PdoManager
- {
- /**
- * Constructeur de la classe
- * Initialise les variables de connexion
- * Test si l'extension pdo est chargée
- *
- * @param array $aParams
- * @return void
- */
- public function __construct($aParams)
- {
- parent::__construct($aParams);
- }
-
- /**
- * Retourne la description de la table
- *
- * @access public
- * @param string $sNameTable
- * @param string $sSchema
- * @return array
- */
- public function describe($sNameTable, $sSchema = null)
- {
- $aData = array();
- $sSql = "SELECT a.attnum, n.nspname, c.relname, a.attname AS colname, t.typname AS type, a.atttypmod, ";
- $sSql .= "FORMAT_TYPE(a.atttypid, a.atttypmod) AS complete_type, d.adsrc AS default_value, ";
- $sSql .= "a.attnotnull AS notnull, a.attlen AS length, co.contype, ARRAY_TO_STRING(co.conkey, ',') AS conkey ";
- $sSql .= "FROM pg_attribute AS a ";
- $sSql .= "JOIN pg_class AS c ON a.attrelid = c.oid ";
- $sSql .= "JOIN pg_namespace AS n ON c.relnamespace = n.oid ";
- $sSql .= "JOIN pg_type AS t ON a.atttypid = t.oid ";
- $sSql .= "LEFT OUTER JOIN pg_constraint AS co ON (co.conrelid = c.oid ";
- $sSql .= "AND a.attnum = ANY(co.conkey) AND co.contype = 'p') ";
- $sSql .= "LEFT OUTER JOIN pg_attrdef AS d ON d.adrelid = c.oid AND d.adnum = a.attnum ";
- $sSql .= "WHERE a.attnum > 0 AND c.relname = '".$sNameTable."' ";
- $sSql .= ( is_null($sSchema) ) ? '' : " AND n.nspname = '".$sSchema."' ";
- $sSql .= "ORDER BY a.attnum;";
- $aRes = $this->query($sSql);
- $aRows = $aRes->fetchAll();
-
- foreach($aRows as $iKey => $sValue)
- {
- $aData[$sValue['colname']]['name'] = $sValue['colname'];
- $aData[$sValue['colname']]['type'] = $sValue['complete_type'];
- $aData[$sValue['colname']]['null'] = ($sValue['notnull'] == 1) ? true : false;
- $aData[$sValue['colname']]['key'] = ($sValue['contype'] == 'P') ? true : false;
- $aData[$sValue['colname']]['default'] = $sValue['default_value'];
- }
-
- return $aData;
- }
-
- /**
- * Retourne la liste des tables de la base
- *
- * @access public
- * @return array
- */
- public function listTable()
- {
- $aData = array();
- $sSql = "SELECT c.relname AS table_name ";
- $sSql .= "FROM pg_class c, pg_user u ";
- $sSql .= "WHERE c.relowner = u.usesysid AND c.relkind = 'r' ";
- $sSql .= "AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname) ";
- $sSql .= "AND c.relname !~ '^(pg_|sql_)' ";
- $sSql .= "UNION ";
- $sSql .= "SELECT c.relname AS table_name ";
- $sSql .= "FROM pg_class c ";
- $sSql .= "WHERE c.relkind = 'r' ";
- $sSql .= "AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname) ";
- $sSql .= "AND NOT EXISTS (SELECT 1 FROM pg_user WHERE usesysid = c.relowner) ";
- $sSql .= "AND c.relname !~ '^pg_';";
- $aRes = $this->query($sSql);
- $aRows = $aRes->fetchAll();
-
- foreach($aRows as $iKey => $sValue)
- {
- $aData[$iKey] = $sValue['table_name'];
- }
-
- return $aData;
- }
-
- /**
- * Retourne le driver de connexion
- *
- * @abstract
- * @access protected
- * @return void
- */
- protected function _getDsn()
- {
- return 'pgsql:host='.$this->_sHostname.';dbname='.$this->_sBasename;
- }
-
- /**
- * Modifie l'encodage de la connexion
- *
- * @access protected
- * @return void
- */
- protected function _setConnectionEncoding()
- {
- if(! is_null($this->_sEncoding) )
- {
- $stmt = $this->_oPdoInstance->prepare('SET client_encoding TO ?');
- $this->execute(array($this->_sEncoding));
- }
- }
- }
- ?>
-
-
- <?php
- namespace Dao;
-
- /**
- * @name DaoFactory
- * @author aberthelot
- * @since 11/10/2008
- * @package Dao
- * @version 4.0.0 - AXB - 11/10/2008
- */
- class DaoFactory
- {
- /**
- * Factory
- * Retourne une instance de la classe désigné par $sType
- *
- * @param array $aParams
- * @return object
- */
- public static function factory(array $aParams)
- {
- if( isset($aParams['adapter']) )
- {
- $sClass = 'Pdo'.ucfirst(strtolower($aParams['adapter']));
- $oReflection = new ReflectionClass($sClass);
-
- if(! $oReflection->isSubclassOf('PdoManager') )
- {
- throw new InvalidArgumentException($sClass.' n\'est pas une classe enfant de "PdoManager".', E_ERROR);
- }
-
- $oInstance = new $sClass($aParams);
- return $oInstance;
- }
- else
- {
- throw new Exception('Aucun type de base de données spécifié.', E_ERROR);
- }
- }
- }
- ?>
-
- ##### EXEMPLES #####
- <?php
- $oPdo = new DaoFactory::factory($aParams);
- $sStmt = $oPdo->query('SELECT tata_yoyo FROM chapeau');
- $aRes = $sStmt->fetchAll();
-
- print '<pre>';
- print_r($aRes);
- print '</pre>';
- ?>
<?php
/**
* @abstract
* @name PdoManager
* @author aberthelot
* @since 11/10/2008
* @package Dao::Pdo
* @version 4.0.0 - AXB - 11/10/2008
* @version 4.0.1 - AXB - 14/11/2008 - Déportation de la méthode connect dans les classes filles
*/
abstract class PdoManager
{
/**
* Host de connexion
*
* @access protected
* @var string
*/
protected $_sHostname;
/**
* Nom d'utilisateur
*
* @access protected
* @var string
*/
protected $_sUsername;
/**
* Password de connexion
*
* @access protected
* @var string
*/
protected $_sPassword;
/**
* Adapter connexion
* Ex : mysql, pgsql
*
* @access protected
* @var string
*/
protected $_sAdapter;
/**
* Nom de la base de données
*
* @access protected
* @var string
*/
protected $_sBasename;
/**
* Port de connexion
*
* @access protected
* @var integer
*/
protected $_iPort;
/**
* Encodage de la base de données
*
* @access protected
* @var string
*/
protected $_sEncoding;
/**
* Connexion base de données
*
* @access protected
* @var object
*/
protected $_oPdoInstance = null;
/**
* Constructeur de la classe
* Initialise les variables de connexion
* Test si l'extension pdo est chargée
*
* @param array $aParams
* @return void
*/
public function __construct($aParams)
{
$this->_sAdapter = ( isset($aParams['adapter']) ) ? $aParams['adapter'] : null;
$this->_sHostname = ( isset($aParams['hostname']) ) ? $aParams['hostname'] : null;
$this->_sPassword = ( isset($aParams['password']) ) ? $aParams['password'] : null;
$this->_sUsername = ( isset($aParams['username']) ) ? $aParams['username'] : null;
$this->_sBasename = ( isset($aParams['basename']) ) ? $aParams['basename'] : null;
$this->_iPort = ( isset($aParams['port']) ) ? $aParams['port'] : null;
$this->_sEncoding = ( isset($aParams['encoding']) ) ? $aParams['encoding'] : null;
if( false === $this->checkExtensionPDo() )
{
throw new Exception('L\'extension "pdo" ou "pdo_'.$this->_sAdapter.'" ne sont pas activées.', E_ERROR);
}
}
/**
* Connexion à la base de données
* Passe la gestion des erreurs en exception
* Si mysql on active l'émulation des requêtes préparés
* Initialisation de l'encodage de la connexion
*
* @access public
* @return void
*/
public function connect()
{
if( is_null($this->_oPdoInstance) )
{
$this->_oPdoInstance = new PDO($this->_getDsn(), $this->_sUsername, $this->_sPassword);
$this->_oPdoInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if( $this->_oPdoInstance->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql' )
{
$this->_oPdoInstance->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
}
$this->_setConnectionEncoding();
}
}
/**
* Mapping des fonction PDO
*
* @access public
* @param string $sMethod
* @param array $aArguments
* @return mixed|boolean
*/
public function __call($sMethod, $aArguments)
{
if( method_exists(get_class($this->_oPdoInstance), $sMethod) )
{
return call_user_func_array(array($this->_oPdoInstance, $sMethod), $aArguments);
}
return false;
}
/**
* Retourne la liste des drivers disponible
*
* @static
* @access public
* @return array
*/
public static function getAvailableDrivers()
{
return PDO::getAvailableDrivers();
}
/**
* Ferme la connexion à la base de données
*
* @access public
* @return void
*/
public function close()
{
$this->_oPdoInstance = null;
}
/**
* Test si l'extension pdo est activé
*
* @access private
* @return boolean
*/
private function checkExtensionPDo()
{
if ( extension_loaded('pdo') )
{
if( extension_loaded('pdo_'.$this->_sAdapter) )
{
return true;
}
}
return false;
}
/**
* Retourne le driver de connexion
*
* @abstract
* @access protected
* @return void
*/
abstract protected function _getDsn();
/**
* Modifie l'encodage de la connexion
*
* @abstract
* @access protected
* @return void
*/
abstract protected function _setConnectionEncoding();
/**
* Retourne la description de la table
*
* @abstract
* @access public
* @param string $sNameTable
* @param string $sSchema
* @return array
*/
abstract public function describe($sNameTable, $sSchema = null);
/**
* Retourne la liste des tables de la base
*
* @abstract
* @access public
* @return array
*/
abstract public function listTable();
}
?>
<?php
/**
* @name PdoMysql
* @author aberthelot
* @since 11/10/2008
* @package Dao::Pdo
* @version 4.0.0 - AXB - 11/10/2008
*/
class PdoMysql extends PdoManager
{
/**
* Constructeur de la classe
* Initialise les variables de connexion
* Test si l'extension pdo est chargée
*
* @param array $aParams
* @return void
*/
public function __construct($aParams)
{
parent::__construct($aParams);
}
/**
* Retourne la description de la table
*
* @access public
* @param string $sNameTable
* @param string $sSchema
* @return array
*/
public function describe($sNameTable, $sSchema = null)
{
$aData = array();
$sSql = 'SHOW COLUMNS FROM '.$sNameTable.';';
$aRes = $this->query($sSql);
$aRows = $aRes->fetchAll();
foreach($aRows as $iKey => $sValue)
{
$aData[$sValue['Field']]['name'] = $sValue['Field'];
$aData[$sValue['Field']]['type'] = $sValue['Type'];
$aData[$sValue['Field']]['null'] = ($sValue['Null'] == 'YES') ? true : false;
$aData[$sValue['Field']]['key'] = ($sValue['Key'] == 'PRI') ? true : false;
$aData[$sValue['Field']]['default'] = $sValue['Default'];
$aData[$sValue['Field']]['extra'] = $sValue['Extra'];
}
return $aData;
}
/**
* Retourne la liste des tables de la base
*
* @access public
* @return array
*/
public function listTable()
{
$aData = array();
$sSql = 'SHOW TABLES;';
$aRes = $this->query($sSql);
$aRows = $aRes->fetchAll();
foreach($aRows as $iKey => $sValue)
{
$aData[$iKey] = $sValue['Tables_in_'.$this->_sBasename];
}
return $aData;
}
/**
* Retourne le driver de connexion
*
* @abstract
* @access protected
* @return void
*/
protected function _getDsn()
{
return 'mysql:host='.$this->_sHostname.';dbname='.$this->_sBasename;
}
/**
* Modifie l'encodage de la connexion
*
* @access protected
* @return void
*/
protected function _setConnectionEncoding()
{
if(! is_null($this->_sEncoding) )
{
$sStmt = $this->_oPdoInstance->prepare('SET CHARACTER SET ?');
$this->execute(array($this->_sEncoding));
}
}
}
?>
<?php
/**
* @name PdoPgsql
* @author aberthelot
* @since 11/10/2008
* @package Dao::Pdo
* @version 4.0.0 - AXB - 11/10/2008
*/
class PdoPgsql extends PdoManager
{
/**
* Constructeur de la classe
* Initialise les variables de connexion
* Test si l'extension pdo est chargée
*
* @param array $aParams
* @return void
*/
public function __construct($aParams)
{
parent::__construct($aParams);
}
/**
* Retourne la description de la table
*
* @access public
* @param string $sNameTable
* @param string $sSchema
* @return array
*/
public function describe($sNameTable, $sSchema = null)
{
$aData = array();
$sSql = "SELECT a.attnum, n.nspname, c.relname, a.attname AS colname, t.typname AS type, a.atttypmod, ";
$sSql .= "FORMAT_TYPE(a.atttypid, a.atttypmod) AS complete_type, d.adsrc AS default_value, ";
$sSql .= "a.attnotnull AS notnull, a.attlen AS length, co.contype, ARRAY_TO_STRING(co.conkey, ',') AS conkey ";
$sSql .= "FROM pg_attribute AS a ";
$sSql .= "JOIN pg_class AS c ON a.attrelid = c.oid ";
$sSql .= "JOIN pg_namespace AS n ON c.relnamespace = n.oid ";
$sSql .= "JOIN pg_type AS t ON a.atttypid = t.oid ";
$sSql .= "LEFT OUTER JOIN pg_constraint AS co ON (co.conrelid = c.oid ";
$sSql .= "AND a.attnum = ANY(co.conkey) AND co.contype = 'p') ";
$sSql .= "LEFT OUTER JOIN pg_attrdef AS d ON d.adrelid = c.oid AND d.adnum = a.attnum ";
$sSql .= "WHERE a.attnum > 0 AND c.relname = '".$sNameTable."' ";
$sSql .= ( is_null($sSchema) ) ? '' : " AND n.nspname = '".$sSchema."' ";
$sSql .= "ORDER BY a.attnum;";
$aRes = $this->query($sSql);
$aRows = $aRes->fetchAll();
foreach($aRows as $iKey => $sValue)
{
$aData[$sValue['colname']]['name'] = $sValue['colname'];
$aData[$sValue['colname']]['type'] = $sValue['complete_type'];
$aData[$sValue['colname']]['null'] = ($sValue['notnull'] == 1) ? true : false;
$aData[$sValue['colname']]['key'] = ($sValue['contype'] == 'P') ? true : false;
$aData[$sValue['colname']]['default'] = $sValue['default_value'];
}
return $aData;
}
/**
* Retourne la liste des tables de la base
*
* @access public
* @return array
*/
public function listTable()
{
$aData = array();
$sSql = "SELECT c.relname AS table_name ";
$sSql .= "FROM pg_class c, pg_user u ";
$sSql .= "WHERE c.relowner = u.usesysid AND c.relkind = 'r' ";
$sSql .= "AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname) ";
$sSql .= "AND c.relname !~ '^(pg_|sql_)' ";
$sSql .= "UNION ";
$sSql .= "SELECT c.relname AS table_name ";
$sSql .= "FROM pg_class c ";
$sSql .= "WHERE c.relkind = 'r' ";
$sSql .= "AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname) ";
$sSql .= "AND NOT EXISTS (SELECT 1 FROM pg_user WHERE usesysid = c.relowner) ";
$sSql .= "AND c.relname !~ '^pg_';";
$aRes = $this->query($sSql);
$aRows = $aRes->fetchAll();
foreach($aRows as $iKey => $sValue)
{
$aData[$iKey] = $sValue['table_name'];
}
return $aData;
}
/**
* Retourne le driver de connexion
*
* @abstract
* @access protected
* @return void
*/
protected function _getDsn()
{
return 'pgsql:host='.$this->_sHostname.';dbname='.$this->_sBasename;
}
/**
* Modifie l'encodage de la connexion
*
* @access protected
* @return void
*/
protected function _setConnectionEncoding()
{
if(! is_null($this->_sEncoding) )
{
$stmt = $this->_oPdoInstance->prepare('SET client_encoding TO ?');
$this->execute(array($this->_sEncoding));
}
}
}
?>
<?php
namespace Dao;
/**
* @name DaoFactory
* @author aberthelot
* @since 11/10/2008
* @package Dao
* @version 4.0.0 - AXB - 11/10/2008
*/
class DaoFactory
{
/**
* Factory
* Retourne une instance de la classe désigné par $sType
*
* @param array $aParams
* @return object
*/
public static function factory(array $aParams)
{
if( isset($aParams['adapter']) )
{
$sClass = 'Pdo'.ucfirst(strtolower($aParams['adapter']));
$oReflection = new ReflectionClass($sClass);
if(! $oReflection->isSubclassOf('PdoManager') )
{
throw new InvalidArgumentException($sClass.' n\'est pas une classe enfant de "PdoManager".', E_ERROR);
}
$oInstance = new $sClass($aParams);
return $oInstance;
}
else
{
throw new Exception('Aucun type de base de données spécifié.', E_ERROR);
}
}
}
?>
##### EXEMPLES #####
<?php
$oPdo = new DaoFactory::factory($aParams);
$sStmt = $oPdo->query('SELECT tata_yoyo FROM chapeau');
$aRes = $sStmt->fetchAll();
print '<pre>';
print_r($aRes);
print '</pre>';
?>
Historique
- 04 janvier 2009 04:19:49 :
- .
- 04 janvier 2009 15:43:48 :
- Modifier pour php 5.2.x
- 04 janvier 2009 17:39:09 :
- Modification de la méthode DaoFactory::factory, j'ai retiré les namespaces
- 04 janvier 2009 17:41:21 :
- .
- 05 janvier 2009 12:44:54 :
- Remplacement des array_key_exists par isset
- 05 janvier 2009 13:10:11 :
- .
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Fonctionnement SDO [ par guill76 ]
Bonjour,Je viens de découvrir un petit peu l'extension SDO de PHP5 que j'ai récupérée en installant PHP5.2.5 il ya environ un semaine et dans cette ex
[PHP5] Etendre une classe prédéfinie [ par ZuGbEn ]
Bonjour !Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des
inclusion d'une classe provenant d'un autre fichier [ par lilippx ]
salut, je me suis mis au php ce matin mais je bute sur un petit truc (dès le premier jour, ce n'est pas motivant...)je n'arrive pas à instancier un ob
utilisation de ereg_replace php5 [ par NINI49 ]
Bonjour, Ce code marchait sous PHP4 Il supprimait tout les liens d'une page récupérée sur un site de résultat de sport (basketfrance.fr en l'occurence
net_ping et windows [ par Lyche ]
Bonjour à tous.Je suis en train de travailler sur un petit projet de monitoring, j'ai trouvé la classe net_ping() qui me parait idéale pour ce que sou
Classes et vérification des données [ par TTMan ]
Bonjour à tous,Je viens pour poser une question peut-être stupide, mais je voudrais savoir s'il est plus intelligent et maintenable de vérifier les do
Refonte de mon site en objet AIDE conception [ par vega11 ]
Bonjour à tous, je suis actuellement en BTS informatique 2ème année et je m'amuse à créer pour une de mes activités un site de rencontre.Je suis très
Site sur php5, Mysql5 [ par laaouar_ibtissem ]
Bonjour, Est ce que possible de me donner un site de debutant concernant php5, Mysql5. Merci
Classe fpdf et limitation du temps d'execution à 30 secondes [ par stevenleferran ]
Bonjour,voilà, j'ai développé un site web gérant des articles de presse scannés.A l'aide de formulaire et de notre bdd, nous pouvons générer un fichie
Boutique en ligne [ par Foxhive ]
Bonjour à tous,Je voudrais creer une boutique en ligne et j'ai regardé cette classe : http://www.phpcs.com/codes/CLASSE-PHP5-PANIER-TOUTE-SIMPLE_34003
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|