Requete sql ORDER BY et GET

niicoos -  
avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

voici la partie de code qui pose probleme:
<?
if (isset($_GET['ordre']))
{
echo $_GET['ordre'];
$reponse = $bdd->prepare('SELECT * FROM map ORDER BY ? ');
$reponse ->execute(array($_GET['ordre']));
}
else
......

ce que j'envoi par get s'affiche bien avec "echo", mais la requete sql ne semble pas le prendre.
si je remplace le "?" avec le parametre que j'envoi par l'url cela fonctionne.

Je deviens dingue le code me semble bon mais quelque chose doit forcement clocher,
j'ai testé d'autre requete qu'ORDER comme WHERE ggg=? et cela fonctionne.

Ou est cette erreur?

2 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Salut.

    Quand tu exécutes la requête avec la méthode PDOStatement::execute, les "?" sont remplacées par la variables passée. Par défaut, PDO ajoute automatiquemetn des guillemets autour de la valeur, ce qui donne donc :
    SELECT * FROM map ORDER BY "champ"

    Je pense que tu as remarqué l'erreur.

    Je te propose de faire comme ceci :
    <?php
    $champsAutorises = array('champ1','champ2','champ3');
    
    if(isset($_GET['ordre']) && in_array($_GET['ordre'], $champsAutorises)) {
        $sql = 'SELECT * FROM table ORDER BY '.$_GET['ordre'];
        $reponse = $bdd->query($sql);
    
        /* ... */
    } else {
        /* ... */
    }
    Dans l'array $champsAutorises, il suffit de mettre les champs pour lesquels tu autorises un "ORDER BY".
    1
  2. niicoos
     
    Merci
    0
    1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Si c'est résolu il y a un lien à cliquer en haut (Marquer comme résolu).
      0