> Tous les forumsForum des Webmasters

 [MySQL] Problème avec LIMIT
Statut du sujet : NON RESOLU Imprimer
 Bleys
  Posté le 16/10/2007 @ 23:17  
 Astucien

2027 Messages

Bonsoir tout le monde,

mon soucis est simple à expliquer, j'espère donc que la solution le sera aussi ...

J'ai une fonction stock_voitures , qui tel quelle ne fonctionne pas :

non fonctionelle
  1. function stock_voitures($marque,$modele,$type,$debut,$nbMessages)
  2. {
  3. global $db;
  4. $param = array();
  5. $param[":debut"]=$debut;
  6. $param[":nbMessages"]=$nbMessages;
  7. $sql='SELECT (marques.Nom) As "marque", (modeles.Nom) As "modele" ';
  8. $sql.='FROM marques, modeles, stock ';
  9. $sql.='WHERE marques.Id_Marque=modeles.Id_Marque AND stock.Id_Modele=modeles.Id_Modele ';
  10. if ($marque!=-1)
  11. {
  12. $sql.='AND marques.Id_Marque= :marque ';
  13. $param[":marque"]=$marque;
  14. }
  15. if ($modele!=-1)
  16. {
  17. $sql.='AND modeles.Id_Modele=:modele ';
  18. $param[":modele"]=$modele;
  19. }
  20. if ($type!=-1)
  21. {
  22. $sql.='AND stock.Type=:type ';
  23. $param[":type"]=$type;
  24. }
  25. $sql.='ORDER BY marque ASC ';
  26. $sql.='LIMIT :debut ,:nbMessages';
  27. $statement=$db->prepare($sql);
  28. $statement->execute($param);
  29. $result=$statement->fetchAll();
  30. return $result;
  31. }

Par contre si je fais ceci tout fonctionne :

Version fonctionnelle mais ne renvoie pas ce qui est désiré
  1. function stock_voitures($marque,$modele,$type,$debut,$nbMessages)
  2. {
  3. global $db;
  4. $param = array();
  5. $param[":debut"]=$debut;
  6. $param[":nbMessages"]=$nbMessages;
  7. $sql='SELECT (marques.Nom) As "marque", (modeles.Nom) As "modele" ';
  8. $sql.='FROM marques, modeles, stock ';
  9. $sql.='WHERE marques.Id_Marque=modeles.Id_Marque AND stock.Id_Modele=modeles.Id_Modele ';
  10. if ($marque!=-1)
  11. {
  12. $sql.='AND marques.Id_Marque= :marque ';
  13. $param[":marque"]=$marque;
  14. }
  15. if ($modele!=-1)
  16. {
  17. $sql.='AND modeles.Id_Modele=:modele ';
  18. $param[":modele"]=$modele;
  19. }
  20. if ($type!=-1)
  21. {
  22. $sql.='AND stock.Type=:type ';
  23. $param[":type"]=$type;
  24. }
  25. $sql.='ORDER BY marque ASC ';
  26. //$sql.='LIMIT :debut ,:nbMessages'; -----------------------------MODIFICATION ICI
  27. $statement=$db->prepare($sql);
  28. $statement->execute($param);
  29. $result=$statement->fetchAll();
  30. return $result;
  31. }

... au détail près que ça ne me renvoie pas ce que je veux ...

Ce que je voudrais c'est que ça ne me renvoie que les $nbMessagesréponses de ma requête.

Dans le premier cas, ma fonction ne me renvoie strictement rien ... Dans le deuxième cas elle me renvoie bien toute la table, j'en suppose donc que ma requête est valide ...

Mais alors où est le problème avec LIMIT ?

Par avence merci pour votre aide

 Afficher le profil de Bleys Envoyer un message privé à Bleys
 
 
Publicité
 Pomp  Posté le 17/10/2007 à 12:52  
Petit astucien

504 Messages

Tu utilises easyphp?

Si oui tu peux tester tes requêtes directement dedans.

Ensuite si la seule différence entre les 2 versions était une petite ligne LIMIT c'était pas la peine de balancer tout ce code pour qu'on évite de tout lire pour rien.

Tu as vérifier le ";" où tu l'as mis dans la requête?

Afficher le profil de PompEnvoyer un message privé à Pomp
 Revenir en haut de la page
 Bleys  Posté le 17/10/2007 à 23:21  
Astucien

2027 Messages

Bonsoir,

le fait de mettre tout le code c'était pour déceler si mon erreur ne venait pas d'ailleurs (mauvaise affectation de variable ou autre)

mais en fait j'ai trouvé le problème, je pense l'avoir identifier, j'ai une solution à celui-ci mais qui ne me plaît pas ...

Donc à moins que quelqu'un me propose mieux je ferais avec celle-ci.

Le problème vient apparement du fait que PDO ne gère pas le fait de mettre un paramètre s'il n'y a pas de signe égal devant (egal ou autre je pense).

Du coup en faisant comme ceci ça fontionne :


  1. $sql.='ORDER BY Marque ASC ';
  2. $sql.='LIMIT '.$debut.','.$nbMessages;
  3. $statement=$db->prepare($sql);
  4. $statement->execute($param);
  5. $result=$statement->fetchAll();

Voila, voila

A bon entendeur, et merci pour toute possible aide

Afficher le profil de Bleys Voir la configuration de BleysEnvoyer un message privé à Bleys
  Revenir en haut de la page
 Pomp  Posté le 17/10/2007 à 23:37  
Petit astucien

504 Messages

déjà c'est quoi ton message d'erreur avec ta 1ere fonction ?

Afficher le profil de PompEnvoyer un message privé à Pomp
 Revenir en haut de la page
 Bleys  Posté le 17/10/2007 à 23:46  
Astucien

2027 Messages
Il n'y a pas de message d'erreur, elle ne renvoie rien ...
Afficher le profil de Bleys Voir la configuration de BleysEnvoyer un message privé à Bleys
  Revenir en haut de la page
 Pomp  Posté le 19/10/2007 à 20:07  
Petit astucien

504 Messages
Le problème vient surement, logiquement, des variables que tu passes à LIMIT alors.
Afficher le profil de PompEnvoyer un message privé à Pomp
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page