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
classe de connection PDO : tester si une base existe [ par 555clR ]
Bonsoir, J'essaie désespérément de tester si une base de données existe... mais je ne vois pas comment faire pour me servir des erreurs 'catchées'. J'
connexion Myslq PDO [ par vargas ]
Bonjour à tous me voila avec une autre question présentement j'ai un fichier fonctions.php qui est une classe qui extend de PDO dans laquelle j'ai t
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
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|