Tutoriel PHP - Développer un site - Plusieurs bases de données

Par Info Konquet, il y a 9 ans


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');

2 réponses

Kareylo, il y a 9 ans

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;
Flynn, il y a 9 ans

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