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 :

PDO PHP-POO et requêtes préparées


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 11
    Points
    11
    Par défaut PDO PHP-POO et requêtes préparées
    Bonjour à vous,
    J'ai pas mal cherché mais je n'arrive décidement pas à me servir des requêtes préparées avec PDO en prog. objet.
    Je débute tout juste avec la POO et je tatonne un peu...
    Voici ma classe de connexion :
    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
    36
    37
    38
    39
    40
    41
    42
    43
     
    class BD
    {
    	private static $conn;
            private $PDOInstance = null;
     
            const DEFAULT_SQL_USER = 'root';
            const DEFAULT_SQL_HOST = 'localhost';
            const DEFAULT_SQL_PASS = '';
            const DEFAULT_SQL_DTB = 'reseaubeaute';
     
     
    	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 getConnexion()
        {
    		if(is_null(self::$conn))
                    {
    			self::$conn = new BD();
    		}
    		return self::$conn;
    	}
     
    	public function query($query)
    	{
    		return $this->PDOInstance->query($query);
    	}
     
    	public function prepare($prepare)
    	{
    		return $this->PDOInstance->prepare($prepare);
    	}
     
    	public function exec($exec)
    	{
    		return $this->PDOInstance->exec($exec);
    	}
     
    }
    et ma petite classe ou je me sers de PDO :
    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
    class MyClass
    {
    	public function maFonction($m_var)
    	{
    		$sql = "SELECT  * FROM codes_postaux WHERE id =".$m_var."";
    		 $requete = BD::getConnexion()->query($sql);
    		$data = $requete->fetch();
    		return $data['ville'];
    	}
     
    	public function liste()
    	{
    		$sql = "SELECT * FROM codes_postaux ORDER BY id DESC LIMIT 30 ";
    		return BD::getConnexion()->query($sql);
    	}
     
    	public function queryPrepare($maVar)
    	{
     
    		$sql = "SELECT  * FROM codes_postaux WHERE  id = ?";
    		$requete = BD::getConnexion();
    		$requete->prepare($sql);
    		return $requete->exec(array($maVar));
     
    	}
     
    	public function deleteVille($numVille)
    	{
    		$sql = "DELETE * FROM codes_postaux WHERE id=".$numVille."";
    		$requete=BD::getConnexion()->exec($sql);
    	}
    }
    ?>
    Donc forcement les fonctions queryPrepare et deleteVille ne fonctionnent pas, c'est surtout parce que je ne comprends pas comment se servir de ces fameuses requêtes préparées...

    mon fichier index.php où je me sers de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    	require('BD.class.php');
    	require('maClasse.php');
     
    	$m_class = new MyClass();
     
     
     
    	echo $m_class->maFonction(333333);
    	$m_class->deleteVille(333333);
     
    ?>
    Bien cordialement,

    Jérôme.

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    normal, quand tu fais appel à ta méthode de class :
    elle ne te retourne pas directement une connexion mais une instance de ton objet de type BD qui lui contient un attribut '$PDOInstance' contenant la connexion, donc tu devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = BD::getConnexion()->PDOInstance->query($sql);
    or ton attribut '$PDOInstance' étant privé, je doute fort que tu puisse y acceder mais si tu le mets en public ça passe.
    Maintenant la question que je me pose c'est :
    ta class c'est une tentative de singleton raté...?! à quoi elle sert ?!
    en plus ta requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function deleteVille($numVille)
    	{
    		$sql = "DELETE * FROM codes_postaux WHERE id=".$numVille."";
    		$requete=BD::getConnexion()->exec($sql);
    	}
    est fausse enlève le joker (*)
    Développeur informatique contrarié...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Ok, merci pour ton aide !
    Oui ça doit être une tentative de singleton raté (involontaire), à vrai dire, je ne sais même pas ce qu'est un singleton...

    C'était juste une classe dont je pourrais me resservir pour me connecter aux bdd dans mes classes...

    Donc si je veux faire une requête préparé, je dois faire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $requete = BD::getConnexion()->PDOInstance->prepare($sql);
    $requete->exec($maVar);
    Bien cordialement,
    J.

  4. #4
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Désolé pour la critique...
    Le singleton est un design pattern qui te permet d'instancier qu'un seul objet de ta class, dans le constructeur tu vérifies si ton attribut de classe pointe vers l'instance de l'objet : si c'est le cas tu renvois cette attribut sinon tu instancies l'objet.
    Pour répondre à ta question : ça doit être bon pour la requête préparé.
    Développeur informatique contrarié...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi tu fais pas des requêtes préparées partout ? la t'es soumis aux injections

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos réponses !


Discussions similaires

  1. Réponses: 5
    Dernier message: 15/03/2016, 14h53
  2. [MySQL] Problème de requête préparée avec PDO
    Par fab56 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/01/2013, 22h06
  3. [PDO] PHP POO et PDO
    Par distar dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/01/2012, 10h54
  4. [PDO] Requête préparée via PDO
    Par immat dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/10/2008, 14h01
  5. [PDO] Problème de requête préparée (à n'y rien comprendre?)
    Par waldo2188 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/03/2007, 21h53

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