Requete sql ORDER BY et GET

Fermé
niicoos - 4 juil. 2010 à 17:58
avion-f16 Messages postés 19125 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 23 mars 2023 - 4 juil. 2010 à 20:00
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

avion-f16 Messages postés 19125 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 23 mars 2023 4 468
4 juil. 2010 à 18:29
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
Merci
0
avion-f16 Messages postés 19125 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 23 mars 2023 4 468
4 juil. 2010 à 20:00
Si c'est résolu il y a un lien à cliquer en haut (Marquer comme résolu).
0