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


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