Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2008, 12h36   #1
Invité régulier
 
Inscription : août 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 14
Points : 8
Points : 8
Par défaut PDO prepared statements avec "ORDER BY"

J'ai un soucis avec une requête PDO. Je souhaite préparer une requête en mettant une option sur l'ordre de sortie ("ORDER BY"). Mais au final, même si tout se passe bien, mes données ne sont pas triées.
Ma requête ressemble à quelque chose du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
$select = "SELECT id, nom, login, date_jour, heure_debut, heure_fin FROM Ma_Table ORDER BY ?, ?, ?, ?";
 
$result = $database->prepare($select);
$result->setFetchMode(PDO::FETCH_ASSOC);
$result->execute(array('login ASC','date_jour ASC','heure_debut ASC','nom ASC'));
 
while($row = $result->fetch())
{
...
}
Pour info, ce script fonctionne et me sort ma table, sauf qu'elle n'est pas triée du tout.
Mon idée est de préparer ma liste et ensuite d'y travailler de différente manière avec un ordonnacement différent.
Peut-être que la préparation ne peut pas s'appliquer pour "ORDER BY" ? Je n'ai pas trouvé d'exemple à ce sujet...

Quelqu'un peut-il m'aider ?
Ashlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 13h03   #2
Membre éprouvé
 
Homme
Inscription : août 2006
Messages : 313
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2006
Messages : 313
Points : 497
Points : 497
As tu essayé avec des bindValue() au lieu de transmettre tes parametres à execute() ?
Phelim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 13h26   #3
Invité régulier
 
Inscription : août 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 14
Points : 8
Points : 8
J'y avais pas pensé; Je viens de modifier comme ça:

Code :
1
2
3
4
5
6
 
$result->bindValue(1, 'login ASC');
$result->bindValue(2, 'date_jour ASC');
$result->bindValue(3, 'heure_debut ASC');
$result->bindValue(4, 'nom ASC');
$result->execute();
Mais non... Pas de différence, ma liste n'est toujours pas triée.
Ashlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 14h08   #4
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Salut,

c'est normal, PDO ne gère pas ces parties d'une requete SQL. En faits, c'est écrit dans la doc, PDO ne bindera jamais les noms de tables, de champs ou les limites par exemple.
Que ce soit avec BindValue ou bindParam (les deux méthodes étant tout de même très similaires..).
PDO ne binderas jamais QUE des valeurs.

Donc, tu le fais à la main, comme un grand.

voilà,
bye
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 14h43   #5
Invité régulier
 
Inscription : août 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 14
Points : 8
Points : 8
Merci kaymak,

Je me résigne donc...
Ashlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 14h59   #6
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Hm, je sais, mais bon, on fait avec : \
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 21h40   #7
Invité de passage
 
Inscription : février 2012
Messages : 1
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 1
Points : 3
Points : 3
Bonjour,

Alors je ne connais pas trop la philosophie de ce forum, à savoir, s'il est plus grave de déterrer un sujet de plus de 3 ans ou de ne pas avoir fait de recherches avant de répondre, donc je me risque :

Il est vrai que PDO ne binde par défaut que des string.
On peut cependant le forcer à accepter des INT avec par exemple le code suivant :
Code :
1
2
3
4
5
 
$req=$bdd->prepare("SELECT * FROM blog ORDER BY id DESC LIMIT :debut, :nombre" );
 $req->bindParam(':debut', $premier_article, PDO::PARAM_INT);
 $req->bindParam(':nombre', $nombre_article, PDO::PARAM_INT);
 $req->execute();
Varal7 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h58.


 
 
 
 
Partenaires

Hébergement Web