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 :

bindParam sur un Order by


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut bindParam sur un Order by
    Bonjour,

    Je n'arrive pas à affecter de valeur à une clause ORDER BY à l'aide d'un bindParam.

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $stmtAvailable	= $dbh->prepare('SELECT id_template as id_element, nom_template as nom_element, duree
    FROM template
    WHERE id_afficheur = :id_afficheur
    AND id_client = :id_client
    AND id_template NOT IN (SELECT id_template
    				FROM template_playlist
    				WHERE id_playlist = :id_playlist)
    ORDER BY :orderby');
    $stmtAvailable->bindParam(':id_afficheur', $id_afficheur, PDO::PARAM_INT);
    $stmtAvailable->bindParam(':id_client', $myClient, PDO::PARAM_INT);
    $stmtAvailable->bindParam(':id_playlist', $myPlaylist, PDO::PARAM_INT);
    $stmtAvailable->bindParam(':orderby', $codeTri);
    Me retourne une PDOException : "non integer constant in ORDER BY". Or $codeTri est une chaîne de caracteres, et meme avec PDO:ARAM_STR il me retourne cette exception.

    Je ne vois de différence avec ce post, et meme avec bindValue l'erreur intervient.

    Merci de votre aide.

  2. #2
    Membre chevronné Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Par défaut
    Ta variable $codeTri est bien le nom d'une colonne de ta table ?

  3. #3
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut
    Oui, quand je fais afficher $codeTri le nom de la colonne que je souhaite mettre apparait, lorsque je mets le nom de cette colonne sans bind ça fonctionne.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    Je ne sais plus ou j'ai lu cela.... En tout cas je n'ai pas pu remettre la main dessus sur php.net. Mais en fouillant tu le trouveras surement.

    Cependant, j'ai pour souvenir que l'on ne peut binder que des valeurs. J'entend par là, que tu ne peux pas binder de nom de colonne, de nom de table ou tout autre chose qui n'est pas une valeur inhérente à un critère de sélection....

    Bref, les orderby, limit, nomde colonne, nom de table ect ne sont pas bindable.

    bye

  5. #5
    Membre chevronné Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Par défaut
    Bon, ben merci, je vais chercher, et essayer d'empêcher la possibilité de faire de l'injection dans ce cas.

    Merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Ben pour ce qui est d'empecher l'injection sql sur ton order by. Comme tu as l'air d'utiliser le numéro de la colonne et non son nom, un simple intval me parait amplement suffisant

    Au pire, tu feras un order by 0....
    Donc au pire, un order by id dans bien des cas ; )

    Dans une certaine mesure tu peux aussi utiliser pdo::quote http://www.php.net/manual/fr/function.PDO-quote.php
    C'est l'équivalent du classique mysql_real_escape_string avec la prise en charge des drivers en plus !

    Après selon le cas d'utilisation, il faudra peut être te tourner vers un match against une liste de données sur.
    J'entends par là, si tu créés des requetes avec des noms de tables dynamique, par exemple, lister les tables existantes et vérifier la valeur d'entrée par rapport à la liste de tables lues dans la base.

    Sinon oui c'est un peu casse pied je te l'accorde.

Discussions similaires

  1. Question sur un Order BY
    Par DeWaRs dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2012, 15h09
  2. Réponses: 1
    Dernier message: 22/09/2010, 14h16
  3. Points sur classement (ORDER BY)
    Par maf dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/01/2009, 20h34
  4. [XSLT] xsl:if sur parm, order d'apres param
    Par splifferwolf dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h48
  5. Probleme sur un ORDER BY
    Par dombili dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/12/2007, 12h30

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