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 :

Requête préparée avec un nom de colonne en paramètre [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Points : 137
    Points
    137
    Par défaut Requête préparée avec un nom de colonne en paramètre
    Bonjour,

    J'essaye d'exécuter une requête préparée avec un nom de colonne que je passe en paramètre, mais malheureusement, je n'y arrive pas.
    Le nom de ma colonne est considéré comme une chaïne de caractères.
    Mon code sera plus parlant :

    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
     
    // On récupère le numéro de la colonne, et on le concatène avec une chaine de caractères :
    $colonne = 'ma_colonne' . $_GET['Numero'];
     
    // Autres paramètres de la requête
    $donnees = 'Un peu de texte';
    $id_ligne = 70;
     
    // Requête
    $query = $bdd->prepare("UPDATE MA_TABLE
    	    SET `:ma_colonne` = :donnees
    	    WHERE id_ligne = :id_ligne");
     
    // Exécution
    $query->execute(array(
         ':colonne' => $colonne,
         ':donnees' => $donnees,
         ':id_ligne' => $id_ligne
    ));
    Et j'ai donc le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[42S22]: Column not found: 1054 Champ ''ma_colonne4'' inconnu dans field list

    Par contre, la méthode 'barbare' fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = "UPDATE MA_TABLE
    	    SET $colonne = '$donnees'
    	    WHERE id_ligne = $id_ligne";
     
    $bdd->query($query);
    Quelqu'un aurait une explication ? Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Question courante : tout nom SQL (colonne par exemple) ne peut faire l'objet d'un paramètre.

    Parameter markers can be used only where data values should appear, not for SQL keywords, identifiers, and so forth.

  3. #3
    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
    essaye avec diffèrent bind avec bindValue

  4. #4
    Membre habitué Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par julp Voir le message
    Question courante : tout nom SQL (colonne par exemple) ne peut faire l'objet d'un paramètre.
    Ah d'accord, je comprends mieux ! Merci

    essaye avec diffèrent bind avec bindValue
    Si j'en crois la réponse de julp, ça ne marchera pas, mais je vais tenter ça demain. Merci à toi aussi !

  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
    Citation Envoyé par chewing-gum Voir le message
    Si j'en crois la réponse de julp, ça ne marchera pas, mais je vais tenter ça demain. Merci à toi aussi !
    oui ca ne fonctionne pas, même si mysql ne renverrai aucune erreur

  6. #6
    Membre habitué Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Points : 137
    Points
    137
    Par défaut
    Oui je confirme, ça ne fonctionne pas !

    Merci pour vos réponses

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

Discussions similaires

  1. Requête pivot avec création d'une colonne "total"
    Par minijim dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/11/2010, 21h09
  2. JTable avec des noms de colonnes spécial
    Par OSryx dans le forum Composants
    Réponses: 5
    Dernier message: 05/10/2010, 14h26
  3. Réponses: 7
    Dernier message: 23/11/2009, 15h59
  4. Pb Update dans une PS avec nom de colonne comme paramètre
    Par blowlagoon dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/06/2006, 10h20
  5. [JTable] Créer une JTable vide avec des noms de colonnes.
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 27/09/2005, 15h54

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