Bonjour,
Voila je rencontre un petit problème avec mon code.
J'ai suivi tous les tutos de la formation Tutoriel PHP - Développer un site - Plusieurs bases de données.
Tout fonctionne parfaitement bien mais je voudrais maintenant me connecter à plusieurs bases de données.
Savez vous comment procéder pour passer ma base sur default2 ?
Voici ma classe conf
<?php
class Conf {
static $debug = 1;
static $databases = array(
'default' => array(
'host' => 'localhost',
'database' => 'base',
'login' => 'login',
'password' => 'passe'
),
'default2' => array(
'host' => 'localhost',
'database' => 'base2',
'login' => 'login',
'password' => 'passe'
)
);
}
Voici mon model
<?php
public $conf = "default";
public $table = false;
public $tableSingulier = false;
public $db;
public $primaryKey = 'id';
public $id;
public $errors = array();
public $form;
public function __construct($conf = null)
{
// Initialization
if ($this->table === false) {
$this->table = strtolower(get_class($this)) . 's'; // Table Name in Database
$this->tableSingulier = strtolower(get_class($this)); // Table Name in Database
}
// Connexion à la base de données
debug($this->conf);
$conf = Conf::$databases[$this->conf];
if (isset(Model::$connections[$this->conf])) {
$this->db = Model::$connections[$this->conf];
return true;
}
try {
$pdo = new PDO('mysql:host=' . $conf['host'] . ';dbname=' . $conf['database'] . ';', $conf['login'], $conf['password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
Model::$connections[$this->conf] = $pdo;
$this->db = $pdo;
} catch (PDOException $e) {
if (Conf::$debug >= 1) {
die($e->getMessage());
} else {
die('Impossible de se connecter à la base de données');
}
}
}
Et quand j'appel le model
<?php
$this->loadModel('Categorie');
Dans ton model, change la ligne conf en
public $conf = "default2";
La base de donnée sera default2.
Si tu veux utiliser plusieurs bases de données à travers toute ton application, tu vas devoir adapter ton code pour avoir 2 objets PDO. (L'un avec default, l'autre avec default2), donc au moment de
$this->db = $pdo;
tu devras avoir aussi un
$this->db2 = $pdo2;
Une Class Database peut être pas mal ^^ :
<?php
class Database {
static function Base_Un(){
return new PDO('mysql:host=localhost;dbname=base;', 'login', 'pwd', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
static function Base_Deux(){
return new PDO('mysql:host=localhost;dbname=base2;', 'login', 'pwd', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
}
$connexion_base_1 = Database::Base_Un() // Retourne un Objet PDO
$connexion_base_2 = Database::Base_Deux() // Retourne un Objet PDO