Bonjour, suite au tuto sur "L'objet PDO en PHP" j'aimerai écrire un seul fois l'objet PDO pour me connecter à la base de donnée.

Avant sans PDO je faisais un fichier core.php avec mes identifiants serveur et je faisait un include de ce fichier pour utiliser mysql mais si je fais pareil avec PDO il me dit que l'objet PDO n'existe pas...

Comment remédier a ce problème ?

Merci.

5 réponses


Bart
Réponse acceptée

Il te suffit de faire une class étendu de PDO comme ça :

class PDO2 extends PDO {
    private static $_instance;
    public function __construct( ) {
    }
    public static function getInstance() {
        if (!isset(self::$_instance)) { 
            try {
            self::$_instance = new PDO(HOST, USERNAME, PASSWORD);
            } catch (PDOException $e) {
                echo $e;
            }
                } 
        return self::$_instance; 
    }
}

La class a besoin de 3 constantes pour fonctionner , HOST, USERNAME et PASSWORD qui sont tes identifiants de connexion a la bdd.

Ensuite quand tu veux te connecter tu fait $bdd = PDO2::getInstance(); si l'objet PDO n'existe pas il est crée sinon on reprend l'ancien. Une fois que c'est fait tu fait comme comme d'hab $r = $bdd->prepare etc ....

Montre ton code pour que l'on puisse essayer de t'aider.

En gros, si je comprend, tu utilises un fichier core dans lequel tu te connectes à la base de donnée.
Ensuite sur toute les pages, tu inclus ce fichier pour éviter d'écrire 40 fois le meme code.
Que sa doit avec les fonctions mysql_connect ou avec la pdo, le fonctionnement est le même. Je m'explique, PDO est la "même chose" que mysql_*, seulement, il y a plus de possibilité (transaction) et qu'il prend me semble-t-il moins de ressource (possibilité de faire des requêtes préparé)

Petites pistes sur le pourquoi de ton problème:
Vérifie que tu inclus bien le fichier core.
Vérifie aussi que tu inclus le fichier core avec la bonne hiérarchisation.
Vérifie les identifiants de connexion sont le bon ....

Hello, il faut rajouter dans ton fichier core.php après la connexion en PDO
global $varPDO

Et dans tes Models remplacer $varPDO ->exec(), $varPDO ->query() etc.. par $GLOBALS'varPDO'] ->exec() (Sans $)

Voilà.. :)

Mixta
Auteur

Merci.