IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Singleton de connexion et Le R du CRUD [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut Singleton de connexion et Le R du CRUD
    Bonjour et Salutations

    Bon, j'ai réaliser un singleton pour la connexion de base de données, le tout fonctionne bien pour cette partie.

    Pour le R du CRUD, aussi. Cependant, j'aimerais bien savoir si c'est fait correctement et si je peux le rendre plus portable.

    Le paramètre de ma fonction est $id et j'aimerais si c'est adéquat de mettre $id au
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bindValue(':id', $id, PDO::PARAM_INT);
    Contexte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
     
    require_once 'pdo_mysql.php';
     
    class Categorie extends pdo_mysql {
     
        private $conn;
        private $id;
     
        public function __construct() {
            $this->conn = pdo_mysql::pdo_connection();
        }
     
        public function select($id) {
            $stmt = $this->conn->prepare("SELECT * FROM categorie WHERE id=:id");
            $stmt->bindValue(':id', $id, PDO::PARAM_INT);
            $stmt->execute();
            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
            return $rows;
        }
    }
     
    $test = new Categorie(); 
    $c = $test->select(170);
     
    foreach ($c as $v) {
        echo $v['cat'] .'<br>';
    }
     
    ?>
    Je sais que je peux ajouter des "setter" et des "getter" mais je verrai pour aller plus loin. Le $id fait référence au paramètre de ma fonction et me semble que c'est supposé être comme cela. J'ai tors? Si oui pourquoi.

    S'il y a lieu de rendre la chose portable, j'aimerais bien avoir un exemple puisque je n'ai aucune idée comment chercher dans les recherches.

    Ça serait vraiment apprécié, ça fait un bout que je suis sur le même genre de problématique.

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Bonjour,
    je n'ai pas grande idée de ce que tu désires faire

    Mais pour avoir une classe + générale :
    1) mettre le nom de la table en propriété

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    protected $tableName='tablename';
    stmt = $this->conn->prepare('SELECT * FROM '.$this->tablename.' WHERE id=:id');
    2) renommer ta classe Categorie en Model
    3) créer classe Categorie extend de Model
    dans lea nouvelle classe juste changer le nom de la classe
    protected $tableName='categorie';

    ---------------------------
    dans methode select()
    retourner un objet ! pourquoi un array
    return $stmt->fetch(PDO::FETCH_OBJ);

    ---------------------------
    un select + général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function select(array $conditions) { ... } // declaration
    $c= $test->select( array('id'=>44) ); // utilisation
    $c= $pizza->select( array('prix'=>4) );

  3. #3
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Pour le 1 et 2, j'ai bien compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class Model extends pdo_mysql {
     
        private $conn;
        private $id;
     
        public function __construct() {
            $this->conn = pdo_mysql::pdo_connection();
        }
    }
     
     
    class Categorie extends Model {
     
        protected $table='categorie';
     
        public function select($id) {
            $stmt = $this->conn->prepare("SELECT * FROM $this->table WHERE id=:id");
            $stmt->bindValue(':id', $id, PDO::PARAM_INT);
            $stmt->execute();
            $rows = $stmt->fetchAll(PDO::FETCH_OBJ);
            return $rows;
        }
    }
    Ça deviendrait quelque chose du genre?

    J'ai compris que select() change mais je n'ai pas compris de quelle manière.

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par dancom5 Voir le message
    J'ai compris que select() change mais je n'ai pas compris de quelle manière.

    1) mettre la methode select() dans la classe Model() car maintenant elle est commune a tous tes futurs modèles.

    en poo il faut etre le + général possible pour aller vers le cas particulier, et toi, ta requete est un cas particulier
    --------- aucune obligation ----------
    2) ici tu passes comme requete sql WHERE id=XXX
    moi je te propose de passer la chaine 'id' en parametre pour avoir une méthode select() plus générique ("WHERE prix=44")

    3) apres tu peux donc ecrire une methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selectID($id) { return $this->select('id'=>$id); }

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut abstract
    note :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    abstract class Model { ... }
    Il faut mettre ta classe Model en abstraite :

    new Model() provoquera alors une erreur

    -------------------------
    abstract class Model extends pdo_mysql ????
    pourquoi ?

  6. #6
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Je le comprends comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
    require_once 'pdo_mysql.php';
     
    abstract class Model extends pdo_mysql {
     
        private $conn;
        protected $table='categorie';
        private $id;
     
        public function __construct() {
            $this->conn = pdo_mysql::pdo_connection();
        }
     
        public function select($id) {
            $stmt = $this->conn->prepare("SELECT * FROM $this->table WHERE id=:id");
            $stmt->bindValue(':id', $id, PDO::PARAM_INT);
            $stmt->execute();
            $rows = $stmt->fetchAll(PDO::FETCH_OBJ);
            return $rows;
        }
    }
     
    class Categorie extends Model {
     
        public function selectID($id) { 
            return $this->select('id'=>$id); 
        }
     
    }
     
    $test = new Categorie(); 
    $c = $test->selectID(170);
     
    ?>
    ps :
    Parse error: syntax error, unexpected T_DOUBLE_ARROW in line 27

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Framework] Remplacer Singleton de connexion à la bdd
    Par chewing-gum dans le forum Spring
    Réponses: 4
    Dernier message: 16/01/2012, 00h03
  2. Connexion à une base de données avec un singleton
    Par slake13 dans le forum Bases de données
    Réponses: 6
    Dernier message: 18/11/2008, 17h26
  3. Singleton de connexion à la base de données
    Par Gunny dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/08/2008, 13h25
  4. Réponses: 1
    Dernier message: 04/07/2008, 14h53
  5. Applet, Servlet et Connexion BDD singleton
    Par Predator79 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/06/2008, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo