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 :

Requete prepare dynamique


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    HwRZxLc4
    Invité(e)
    Par défaut Requete prepare dynamique
    Bonjour,

    Je me pose la question sur comment on peux réaliser des requêtes PDO dynamique pour le tri, exemple :

    Requête de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = $DB->prepare(SELECT * ma_table ORDER BY id ASC);
    $sql->execute();
    ....

    Requête de tri sur le nom croissant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = $DB->prepare(SELECT * ma_table ORDER BY nom ASC);
    $sql->execute();

    Requête de tri sur le nom décroissant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = $DB->prepare(SELECT * ma_table ORDER BY nom DESC);
    $sql->execute();
    Etc pour le prenom, ville, ...

    Pour simplifier et rendre le code biens plus léger, quelle méthode utiliser/existe t-il ?

    Merci d'avance pour vos lumières.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    ceci ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = $DB->prepare('SELECT * ma_table ORDER BY ? DESC');
    $sql->execute(array('nom'));

  3. #3
    HwRZxLc4
    Invité(e)
    Par défaut
    Bonjour et merci pour la réponse,

    Il manque la possibilité de changer ASC en DESC

    ce-si peux t-il fonctionner ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = $DB->prepare('SELECT * ma_table ORDER BY ? ?');
    $sql->execute(array('nom','ASC'));

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Le mieux est de faire un test

  5. #5
    Membre expérimenté

    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
    Par défaut
    Seules des valeurs peuvent faire l'objet de paramètres. Les noms SQL (colonnes, tables, bases, etc) ou mot-clés (asc/desc) en sont exclus. D'autant qu'ils se verraient ajoutés des quotes et on s'éloigne quelque peu de leur principe ...

    Donc, non, impossible de dynamiser ces parties de requêtes avec une requête préparée (il faut le faire avant la préparation ou avec une requête non préparée). (à se demander si des requêtes préparées sont ici utiles par ailleurs)

  6. #6
    HwRZxLc4
    Invité(e)
    Par défaut
    Merci julp, c'est bien ce qu'il me semblais :s

    Pas gagner d'avoir un code légé et lisible avec un tri multi colonne ....

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Alors dans ce cas il faut préparer la requête dynamiquement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $nom = 'nom'
    $req = 'SELECT * ma_table ORDER BY '.$nom;
    $sql = $DB->prepare($sql);
    $sql->execute();

  8. #8
    HwRZxLc4
    Invité(e)
    Par défaut
    Donc ce genre de truc va être fonctionnel ? avec la sécu qui va avec ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nom = 'nom';
    $tri = 'ASC';
    $req = 'SELECT * ma_table ORDER BY '.$nom.' '.$tri;
    $sql = $DB->prepare($sql);
    $sql->execute();

Discussions similaires

  1. requete sql dynamique [JasperReport]
    Par ersoufiane dans le forum iReport
    Réponses: 12
    Dernier message: 18/01/2013, 18h19
  2. Réponses: 2
    Dernier message: 07/10/2007, 16h59
  3. Réponses: 3
    Dernier message: 20/03/2007, 13h30
  4. Requete BD dynamique
    Par shadockgreg dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/08/2006, 20h39
  5. graphique a partir d une requete croisée dynamique
    Par tamerlan dans le forum Access
    Réponses: 2
    Dernier message: 30/03/2006, 09h12

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