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 :

Paramètres non pris en compte [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut Paramètres non pris en compte
    Salut,

    Je me lance un peu dans PDO et là je sèche sur un problème que je n'explique pas.

    Ma requête est bien exécutée mais elle ne prend pas en compte les paramètres que je lui donne.

    Je dois passer à côté de quelque chose mais quoi

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $order = '`titre`';
    $up = 'ASC';
     
    $jeux = $this->jeu->getJeu(array(':order' => $order, ':up' => $up));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public function getJeu($params) {
    		$query = 'SELECT `titre`, E.`libelle`, `date_sortie`, `note`, S.`libelle`, J.`id`, G.`libelle`, D.`libelle`, `image` 
    			FROM `jeu` J 
    				INNER JOIN `editeur` E ON J.`editeur` = E.`id` 
    				INNER JOIN developpeur D ON J.`developpeur` = D.`id` 
    				INNER JOIN genre G ON J.`genre` = G.`id` 
    				INNER JOIN `statut` S ON J.`statut` = S.`id` 
    			ORDER BY :order :up';
     
    		$resultats = Db::requete($query, $params);
     
    		return $resultats;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected function requete($sql, $params = null) {
    		if ($params == null) {
    			$resultat = $this->getBdd()->query($sql);    // exécution directe
    		}
    		else {
    			$resultat = $this->getBdd()->prepare($sql);  // requête préparée
     
    			$resultat->execute($params);
    		}
     
    		return $resultat->fetchAll();
    	}
    Quelqu'un aurait une piste ?

    Merci par avance.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le nom des objets (base, table, colonne) ne peut pas être mis en paramètre.
    Le moteur de bdd ne peut pas préparer une requête s'il ne sait pas ou on va l'envoyer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Je suis pas sûr de te suivre.

    Ma requête est bien envoyée au serveur, et je reçois bien une réponse et l'affiche correctement.

    On ne peut pas passer le champ qui sera utilisé pour le ORDER BY de la requête ? Si c'est ça, c'est vraiment très étrange.

    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
    abstract class Db {
     
    	private $db;
     
    	private function getBdd() {
    		try {
    			$strConnection = 'mysql:host=localhost;dbname=mediatheque';
    			$arrExtraParam = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
     
    			$this->db = new PDO($strConnection, 'root', '', $arrExtraParam);
     
    			$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    			return $this->db;
    		}
    		catch(PDOException $e) {
    			$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    			die($msg);
    		}
    	}
     
    	protected function requete($sql, $params = null) {
    		if ($params == null) {
    			$resultat = $this->getBdd()->query($sql);    // exécution directe
    		}
    		else {
    			$resultat = $this->getBdd()->prepare($sql);  // requête préparée
     
    			$resultat->execute($params);
    		}
     
    		return $resultat->fetchAll();
    	}
    }
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est exactement ça.
    Ce n'est pas étrange : dans une requête préparée le moteur de bdd va préparer son plan d’exécution ; il ne peut pas le faire si tu ne lui donnes pas le nom de tous les éléments en jeu.
    La préparation ce n'est pas seulement une substitution de valeurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    D'accord, je n'avais pas bien intégré ce mécanisme.

    Merci pour l'information, je passe en résolu.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/11/2010, 22h01
  2. [CR XI] Paramètre d'entrée non pris en compte
    Par grochatisen dans le forum SDK
    Réponses: 0
    Dernier message: 16/07/2010, 14h21
  3. [MySQL] Paramètre de requête non pris en compte
    Par designrf dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/03/2010, 09h43
  4. paramètres entrés mais non pris en compte
    Par lecamer dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/06/2008, 13h06
  5. [HTACCESS] Paramètres non pris en compte
    Par alexfrere dans le forum Apache
    Réponses: 1
    Dernier message: 30/01/2007, 21h17

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