Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2023 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème LIMIT avec requête préparée PDO

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème LIMIT avec requête préparée PDO

n°2001990
wizopunker
FUCK ANARCHY!
Posté le 16-06-2010 à 00:05:40  profilanswer
 

Bonjour,
Méga débutant en php, je suis en train de me coder un CMS maison pour apprendre. Jusqu'à là, pas trop de problème..Mais la je commence à bosser sur la pagination.
J'utilise PDO pour converser avec ma base, mais j'ai un problème pour l'utilisation du LIMIT en commande préparée pour utiliser avec des variables...
 

Code :
  1. $req=$bdd->prepare('SELECT * FROM blog ORDER BY id DESC LIMIT :mini,:maxi');
  2.  $req->execute(array('mini'=>$premier_article, 'maxi'=>$dernier_article));


Sachant que si je var_dump mes deux variables elles renvoient un int(x) (où x la valeurs que je transmet avec un $_GET)
 
Si je remplace :mini et :maxi directement par des valeurs.. ça marche
 
Mais avec la configuration actuelle, ça ne me renvoit aucun article.
 
Des idées? J'ai pas compris un truc tout con?? Parce que je me chie dessus à relire mon code, je trouve paaas grumpf


---------------
| .:: www.wizopunk-art.com - Développement web ::. |
mood
Publicité
Posté le 16-06-2010 à 00:05:40  profilanswer
 

n°2002009
abais
Posté le 16-06-2010 à 08:19:03  profilanswer
 

wizopunker a écrit :

Bonjour,
Méga débutant en php, je suis en train de me coder un CMS maison pour apprendre. Jusqu'à là, pas trop de problème..Mais la je commence à bosser sur la pagination.
J'utilise PDO pour converser avec ma base, mais j'ai un problème pour l'utilisation du LIMIT en commande préparée pour utiliser avec des variables...

 
Code :
  1. $req=$bdd->prepare('SELECT * FROM blog ORDER BY id DESC LIMIT :mini,:maxi');
  2.  $req->execute(array('mini'=>$premier_article, 'maxi'=>$dernier_article));


Sachant que si je var_dump mes deux variables elles renvoient un int(x) (où x la valeurs que je transmet avec un $_GET)

 

Si je remplace :mini et :maxi directement par des valeurs.. ça marche

 

Mais avec la configuration actuelle, ça ne me renvoit aucun article.

 

Des idées? J'ai pas compris un truc tout con?? Parce que je me chie dessus à relire mon code, je trouve paaas grumpf

 

Oh, vous ici !

 


Deja, le chiffre après la virgule du LIMIT est le nombre de reponse que tu souhaites et non "le dernier index" souhaité, enfin, c'est le nom de ta $var qui me fait tilter ça...

 

Après, je n'ai jamais vu cette notation :var...
Si tu as pris soin de bien verifier $premier_article et $dernier_article était bien des int() afin d'éviter le SQL injection, tu peux concaténer ces variables direct dans ta requête...

 
Code :
  1. $req=$bdd->query('SELECT * FROM blog ORDER BY id DESC LIMIT'.$premier_article.', '.$dernier_article);
 

Sinon, plus "propre" (?) :

 
Code :
  1. $req=$bdd->prepare('SELECT * FROM blog ORDER BY id DESC LIMIT ?, ?');
  2. $req->execute(array($premier_article, $dernier_article));



Message édité par abais le 16-06-2010 à 08:23:15

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2002174
wizopunker
FUCK ANARCHY!
Posté le 16-06-2010 à 13:43:13  profilanswer
 

Oui, moi ici :D

 

oui effectivement, j'ai mal géré ma nomenclature de la variable, mais à part ça j'suis ok sur la fonction LIMIT. J'ai pas encore pris de bons automatisme en terme de nomenclature, c'est un peu relou :D

 

Bon à par ça, tes propositions ne marchent pas..Ta concaténation ne passe pas, et la préparation avec les "?" ne marche pas. Au passage cette préparation est quasi la même qu'avec les :var (qui marche très bien sur une requête normale d'ailleurs).

 

Ah et j'en ai profité pour renommer ma variable :D

 

Du coup, j'ai fait un req->errorInfo() :

Code :
  1. Array ( [0] => 42000 [1] => 1064 [2] => Erreur de syntaxe près de ''0', '20'' à la ligne 1 )
 

J'ai testé avec :

 
Code :
  1. $req=$bdd->prepare("SELECT * FROM blog ORDER BY id DESC LIMIT :debut, :nombre" );
  2.  $req->execute(array(':debut'=>$premier_article, ':nombre'=>$nombre_article));
 

et

 
Code :
  1. $req=$bdd->prepare("SELECT * FROM blog ORDER BY id DESC LIMIT :debut, :nombre" );
  2.  $req->bindParam(':debut', $premier_article);
  3.  $req->bindParam(':nombre', $nombre_article);
  4.  $req->execute();
 

Quelqu'un a une idée? Je dois faire un truc tout con, et j'aime pas sa manière de gérer les ' et le " :D


Message édité par wizopunker le 16-06-2010 à 13:44:07

---------------
| .:: www.wizopunk-art.com - Développement web ::. |
n°2002318
wizopunker
FUCK ANARCHY!
Posté le 16-06-2010 à 17:55:00  profilanswer
 

ah, ben j'ai réussis!
En fait la piste à creuser était bien au niveau des guillemets. PDO interprète toute valeur par défaut en string. Il faut donc lui indiquer que c'est un entier:

Code :
  1. $req=$bdd->prepare("SELECT * FROM blog ORDER BY id DESC LIMIT :debut, :nombre" );
  2.  $req->bindParam(':debut', $premier_article, PDO::PARAM_INT);
  3.  $req->bindParam(':nombre', $nombre_article, PDO::PARAM_INT);
  4.  $req->execute();


---------------
| .:: www.wizopunk-art.com - Développement web ::. |
n°2002343
abais
Posté le 16-06-2010 à 20:15:42  profilanswer
 

C'est bon à savoir, je me sert aussi de PDO (depuis peu) , je n'avais jamais eu affaire à ça...
C'est curieux tout de même...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2002357
abais
Posté le 16-06-2010 à 21:19:19  profilanswer
 

Je viens d'essayer chez moi, j'ai en effet le même problème si je donne les paramètres au moment de l'exécution...
Sinon mon premier code marche, seulement j'ai oublier un espace après le LIMIT...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2002360
wizopunker
FUCK ANARCHY!
Posté le 16-06-2010 à 21:37:21  profilanswer
 

ouais mais bon concaténer je savais faire, mais je trouve ça un peu illisible à la relecture, je préfère le faire proprement :D


---------------
| .:: www.wizopunk-art.com - Développement web ::. |

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème LIMIT avec requête préparée PDO

 

Sujets relatifs
[AC-2007]Affichage de tous les résultats d'une requête dans un seul chcomment tester si le résultat de la requête est nul [résolu]
[RESOLU] Problème Requête Mondrian/JPivotRequete Serveur WGET
Problème avec une entrée de tache.Problème d'accent
Problème accéder l'élement DOM (parsing html)Problème code PHP insertion données form dans DB
Problème d'utilisation de DSN avec socket (PHP &PEAR) 
Plus de sujets relatifs à : Problème LIMIT avec requête préparée PDO


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR