PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-12-2011 15:21:40

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

debut en PDO

Bonjour

je me mets donc au PDO et souhaite mettre en place ma classe de connexion!


Class DbConnexion {

  private static $instance;
 
const $PARAM_hote='localhost';
const $PARAM_port='3306';
const $PARAM_nom_bd='platf_gest';
const $PARAM_utilisateur='root';
const $PARAM_mot_passe='unpass';
 
   public static function getInstance()
  {
    if(!isSet(self::$instance))
    {
            try
{
        self::$instance = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
}
 
catch(Exception $e)
{
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
}
    }

    return self::$instance;
  }
 

}
 
 

toutefois cela ne fonctionne pas, ou est donc mon erreur please?

Hors ligne

#2 09-12-2011 15:26:49

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : debut en PDO

Bonjour,

Rien de plus normal. Tu ne dois pas créer un singleton de PDO mais un singleton de ta classe qui implémente PDO.^^

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 09-12-2011 15:32:05

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : debut en PDO

Bonjour JC

pourrais tu etre un peu plus clair?
merci d'avance

Hors ligne

#4 09-12-2011 21:15:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : debut en PDO

Oui bien sûr.

Tu crée ta classe myPDO par exemple que tu construis en singleton et tu lui associes une instance de PDO... rien de compliqué.
Le Singleton c'est vraiment la base de la POO en termes de modèle. J'ai peur pour la suite...


class myPDO{  
   private $PDOInstance = null;   // Instance de la classe PDO
   private static $_instance = null;                  // Instance de la classe myPDO

   private function __construct() {
      require('config/myconfig.php'); // accès aux paramètres DB
      try {
          $this->PDOInstance = new PDO($dsn_filomenu, $db_user, $db_pwd,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
          $this->PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
       } catch (PDOException $e) {trigger_error($e->getmessage(),E_USER_WARNING);}
   }
   public static function getInstance() {
        if (is_null(self::$_instance)) {self::$_instance = new myPDO();}
        return self::$_instance;
   }
}
 

Aaah ces jeunes faut tout leur dire wink

Dernière modification par Jc (09-12-2011 21:31:08)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 09-12-2011 23:07:02

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : debut en PDO

vaut mieux faire une classe qui hérite de pdo wink
a++

Hors ligne

#6 10-12-2011 08:44:55

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : debut en PDO

Oui c'est une autre possibilité.
EDIT: Et puis l'un n'empêche pas l'autre wink

Dernière modification par Jc (10-12-2011 18:18:18)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 19-12-2011 16:18:59

Darkangel
Membre
Inscription : 20-11-2009
Messages : 128

Re : debut en PDO

Bonjour,

Sur les recommandations fondées de JC j'avais pris le temps depuis mon dernier post de remettre à plat ma base de donnée chose que j'ai faites et qui est désormais en cours de finalisation.
J'ai également pris connaissance du doc PDO traduit par Maljuna.

Aussi je me retrouve désormais à devoir programmer ce que je souhaite.
Je vais donc fonctionner par étape.

La première d'entre elle réside donc dans la connexion à la base.

je pense avoir cerner les base d'une connexion classique:

1.  try
2.      {
3.      $conn = new PDO($connStr, 'chef','motdepasse');
4.      }
5.  catch(PDOException $pe)
6.      {
7.      die('Connexion impossible à la base de données pour : ' .
8.        $pe->getMessage();
9.      }
10. $q = $conn->query();
11. if(!$q)
12.     {
13.     $ei=$conn->errorinfo();
14.     die('Requête rejetée pour : '. $ei[2]);
15.     }
 


toutefois en ce qui concerne une classe de connexion je ne suis pas sur d'avoir tout saisi!
En effet, j'ai comparé le script que j'avais mis en 1er post et la réponse de JC ca c'est ok, j'ai bien compris le pourquoi ça ne fonctionnait pas mais toutefois apres l'autre réponse de Pierrot concernant l'héritage de PDO je ne comprend pas.

Dois je conclure que c'est plus adapté?
cela serait il correct?

Class DbConnexion extends PDO {
private $host = "localhost";
private $db = "platf_gest_new";
private $db_user = "root";
private $db_password = "unpass";
private static  $PDOinstance = null;
private static $_instance = null;

private function montreErreur($message)
{
echo "<h2>Erreur</h2>";
echo nl2br(htmlspecialchars($message));
exit();
}


private function __contruct() {
try {
$this->PDOinstance = new PDO('mysql:host='.$host.';dbname='.$db, $db_user, $db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
$this->PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
}

catch (PDOException $e)
{

montreErreur("Désolé, une erreur s'est produite.
 Merci d'essayer plus tard.\n"
.trigger_error($e->getmessage(),E_USER_WARNING)
  ."<br />\n N° : ".$e->getCode()
 );
}
}
public static function getInstance() {
  if (is_null(self::$_instance)) {self::$_instance = new DbConnexion();}
     return self::$_instance;
   }
}
 

Vous en remerciant par avance

Hors ligne

Pied de page des forums