Connexion POO

Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 5 nov. 2014 à 12:33
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 6 nov. 2014 à 06:26
Bonjour,
J'ai créé un site vraiment traditionnel (procédural), mais je souhaite passer à la Programmation Orienté Objet.
Ma première class que je dois créé c'est la connexion à ma BDD.
Sur le net il y en a énormément je suis un peu perdu.
Voilà ce que j'ai trouvé, pouvez-vous me dire si ça pourrais convenir ou si vous avez peut-être une class qui serai mieux adaptée.
Merci énormément
<?php
class Config {
    /* DATABASE CONFIGURATION */
    const HOTE      = 'localhost';
    const DBNAME    = 'monsite';
    const USERNAME  = 'root';
    const PASSWORD  = '';
}
?>

<?php
class Database extends PDO {

    public function __construct() {
        try {
            parent::__construct('mysql:host=' . Config::HOTE . ';dbname=' . Config::DBNAME, Config::USERNAME, Config::PASSWORD);

            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        } catch(Exception $e) {
            echo 'Impossible de se connecter à la base de donnée</br>';
            echo 'Erreur : ' .  $e->getMessage() . '<br />';
            echo 'N° : ' .      $e->getCode();
        }
    }
}
?>
A voir également:

5 réponses

Anth0x Messages postés 2736 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 20 avril 2016 967
Modifié par Anth0x le 5/11/2014 à 12:47
Salut,

C'est pas comme ça qu'on fait, et on déclare pas deux page php dans la même page !

D'ailleurs la POO n'est pas propre à PHP, tu confonds avec PDO, la POO s'applique à un ensemble de language qui est orientée objet.

Voila une déclaration de connexion en PDO avec déclaration d'erreur au besoin :

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Erreur !: " . $e->getMessage() . "<br/>";
    die();
}
?>


Et pour fermer la connexion tu ajoute en fin de page de t'es requete un simple "null", comme ceci :

$dbh = null;


Je te conseil vivement d'aller voir le maneul PHP et de connaitre l'utilité et la méthodologie de l'orientée objet, et après tu ira voir l'utilité d'un framework, car ici c'est que du "brut" ^^
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 nov. 2014 à 12:53
Bonjour
Je me suis mal expliqué chacune des 2 class sont dans deux pages différentes en fait.
0
Anth0x Messages postés 2736 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 20 avril 2016 967
Modifié par Anth0x le 5/11/2014 à 14:08
Ok, dans tout les cas, ce que je t'ai mit est le mieux adapté, même si t'es codes sont censé fonctionner ça ne respecte pas les normes.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 5/11/2014 à 16:21
Salut,

Si tu souhaites utiliser une classe qui étend PDO, il faut que celle-ci te retourne l'instance PDO pour pouvoir utiliser les méthodes query, prepare, etc sur cette instance.

Souvent on utilise également le pattern singleton pour ne récupérer qu'une seule instance de PDO à chaque appel de la classe (pour ne faire la connexion qu'une seule fois).

Tu peux trouver un exemple ici : https://apprendre-php.com/tutoriels/tutoriel-47-classe-singleton-d-accs-aux-sgbd-intgrant-pdo.html

Bonne journée
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 nov. 2014 à 20:13
Bonjour
Je voudrais vous demander si cette connexion pour ma BDD serait-elle bien adaptée.
Merci de votre avis.
<?php
class SPDO {
    private $PDOInstance = null;
    private static $instance = null;

        const DEFAULT_SQL_USER  = 'root';
        const DEFAULT_SQL_HOST  = 'localhost';
        const DEFAULT_SQL_PASS  = '';
        const DEFAULT_SQL_DTB   = 'monsite';

    private function __construct() {
        $this->PDOInstance = new PDO('mysql:dbname='.self::DEFAULT_SQL_DTB.';host='.self::DEFAULT_SQL_HOST,self::DEFAULT_SQL_USER ,self::DEFAULT_SQL_PASS);
    }

    public static function getInstance() {
        if(is_null(self::$instance)) {
            self::$instance = new SPDO();
        }
        return self::$instance;
    }

    public function query($query) {
        return $this->PDOInstance->query($query);
    }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 6/11/2014 à 06:26
Bonjour

Alors voilà j'ai trouvé pour une connexion à ma BDD cette class.
Pour moi elle est très compréhensible dites-moi si je peux l'utiliser telle quelle s'ils vous plait.
En vous remerciant
class connexion {

    private static $instance;
    private $type = "mysql";
    private $host = "localhost";
    private $dbname = "monsite";
    private $username = "root";
    private $password = '';

    private $dbh;

    /*** Lance la connexion à la base de donnée en le mettant * dans un objet PDO qui est stocké dans la variable $dbh * @access private */
    private function __construct() {
        try {
            $this->dbh = new PDO (
                $this->type.':host='.$this->host.'; dbname='.$this->dbname, 
                $this->username, 
                $this->password,
                array(PDO::ATTR_PERSISTENT => true)
            );

                $req = "SET NAMES UTF8";
                $result = $this->dbh->prepare($req);
                $result->execute();
        }
        catch(PDOException $e) {
            echo "<div class='error'>Erreur !: ".$e->getMessage()."</div>";
            die();
        }
    }

    /*** Regarde si un objet connexion a déjà été instancier, * si c'est le cas alors il retourne l'objet déjà existant * sinon il en créer un autre. * @return $instance */
    public static function getInstance() {
        if (!self::$instance instanceof self) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    /*** Permet de récuprer l'objet PDO permettant de manipuler la base de donnée * @return $dbh */
    public function getDbh() {
        return $this->dbh;
    }
}
?>
0