2009-09-24 8 views
7

J'aime préfixer mes tables au cas où je devrais installer l'application sur un hôte avec une seule base de données. Je me demandais s'il y a une façon simple de travailler avec les préfixes de table en utilisant la classe PDO?PDO - Travailler avec les préfixes de table

Pour l'instant, je dois remplacer chaque méthode dans ma propre base de données encapsulée, remplacer% p par le préfixe et appeler la super méthode. Ca marche, mais ce n'est pas joli!

Répondre

9

L'extension de la classe PDO est probablement la meilleure option.

class MyPDO extends PDO 
{ 
    protected $_table_prefix; 
    protected $_table_suffix; 

    public function __construct($dsn, $user = null, $password = null, $driver_options = array(), $prefix = null, $suffix = null) 
    { 
     $this->_table_prefix = $prefix; 
     $this->_table_suffix = $suffix; 
     parent::__construct($dsn, $user, $password, $driver_options); 
    } 

    public function exec($statement) 
    { 
     $statement = $this->_tablePrefixSuffix($statement); 
     return parent::exec($statement); 
    } 

    public function prepare($statement, $driver_options = array()) 
    { 
     $statement = $this->_tablePrefixSuffix($statement); 
     return parent::prepare($statement, $driver_options); 
    } 

    public function query($statement) 
    { 
     $statement = $this->_tablePrefixSuffix($statement); 
     $args  = func_get_args(); 

     if (count($args) > 1) { 
      return call_user_func_array(array($this, 'parent::query'), $args); 
     } else { 
      return parent::query($statement); 
     } 
    } 

    protected function _tablePrefixSuffix($statement) 
    { 
     return sprintf($statement, $this->_table_prefix, $this->_table_suffix); 
    } 
} 
+0

salut est-ce juste moi ou sur la fonction/méthode '_tablePrefixSuffix' le dernier bit' this_table_suffix' $ est-il supposé être '$ this -> _ table_suffix'? – Val

+0

Je ne sais pas comment cela a peut-être été considéré comme un exemple de travail, car 'sprintf' attend une chaîne de format avec des ancres spéciales, mais l'argument' $ statement' est simplement une chaîne simple, simplement ignorée et retournée telle quelle. –

+0

Ok, compris. Vous venez de spécifier le nom de la table avec les ancres: '$ table ="% 1 \ $ s {$ table}% 2 \ $ s "' –

Questions connexes