Pdo : Se rendre à une ligne spécifique (seek)

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 21 mai 2008 à 23:03
DarthKiller Messages postés 1 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 15 octobre 2008 - 15 oct. 2008 à 14:35
Voila je crois que le titre résume plutot bien ! :)
J'ai un PDOStatement récupéré grace à un $PDO->Query et j'aimerai me rendre à la ligne x.
Comment faire ?
En effet, PDOStatement n'intègre pas un $PDOStatement->seek (x); (ce serait trop beau).

Du coup il fait comment bibi ? :p

Merci de vos aides ! :)
A voir également:

14 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 mai 2008 à 23:23
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 mai 2008 à 23:27
Mais si j'ai bien compris la doc, le troisieme parametre, c'est l'offset, donc la valeur du seek ?
Parce que là dans leur cas l'offset à deux valeurs possibles :
PDO::FETCH_ORI_ABS
PDO::FETCH_ORI_REL

Donc difficile d'aller à une ligne précise.
Aurais-je loupé quelque chose ?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
21 mai 2008 à 23:39
essaye avec le 1er, et ton offset, oui.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 mai 2008 à 00:18
Si je fait un :
$oPDOStatement->setFetchMode(PDO::FETCH_NUM, PDO::FETCH_ORI_ABS, ($iPage*$iStep));

ca ne marche pas (le résultat reste le même malgré le nombre indiqué en dernier).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 mai 2008 à 07:26
salut
quand je vois un $iPage * $iStep, ca me fait penser a de la pagination.
tu ne peut pas faire ca avec un limit ?
ou avec un WHERE id BETWEEN .... AND ... ?
ca consommerait moins de ressources
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 mai 2008 à 10:01
J'y ai pensé, mais le between peux poser des soucis si une valeur à été supprimée (genre 1,2,3,5,6,7,...).
Pour ce qui est du limit, j'avais entendu dire que plus on s'approchait de la fin de la table, plus le traitement était long (car il parcours toute la table avant quand même).

Mais en effet, OUI, c'est pour faire de la pagination ! :)

Et ca me perturbe que PDO n'implémente pas un seek. Comment ils proposent une pagination dans ce cas ? Il faut faire une classe qui implémente un arrayIterator et faire un fetchAll dans cette classe ? ca me parait lourd aussi ! :/
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 mai 2008 à 11:22
Je pense que c'est le driver mysql utilisé, ou la version de mysql, qui ne permet pas l'utilisation des curseurs.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 mai 2008 à 12:35
C'est possible, mais je tourne sur du mysql 5.2 si mes souvenirs sont bons...

Tu à déjà fait du "seek" avec pdo ?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 mai 2008 à 12:42
Non, et j'ai essayé sans succès ce matin. De même que j'ai essayé l'exemple 2 de la doc php.net sur pdostatement::fetch(), sans succès non plus. C'est pourquoi je pense que le driver utilisé ne le permet pas (je n'ai pas dit qu'il en existait un lol, tu noteras : je n'en sais rien).
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 mai 2008 à 13:09
Je vais essayer de les contacter pour voir ce qu'ils disent à ce sujet, et éventuellement proposer un tutorial ensuite.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 mai 2008 à 13:18
seek consommera encore plus qu'un limit...

et limit consomme en fait au milieu de la table.

j'avais fait un article sur mon blog, sur ce sujet (mais j'ai supprime) si tu veux, je le reposte
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 mai 2008 à 13:22
L'inconvénient de LIMIT, c'est que ce n'est pas du sql standard. Maintenant, si on n'utilise que mysql (ou les autres bdd l'utilisant, mais les syntaxes sont parfois différentes), pourquoi pas en effet, c'est optimisé.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 mai 2008 à 13:52
Ok alors je vais partir sur Limit vu que c'est que du MySql ! :)

Bon bah pour seek tant pis  alors :p

Merci pour vos renseignements.

@Coucou747 : Je veux bien jeter un oeil à ton article, c'est toujours intéressant ! :)
0
DarthKiller Messages postés 1 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 15 octobre 2008
15 oct. 2008 à 14:35
Bonjour à tous !

Il semblerait que tous les drivers PDO ne gèrent pas le seek(), et malheureusement celui de MySQL en fait partie. Un ami et moi-même envisageons comme solution possible de construire nous-même un itérateur à partir de l'interface SeekableIterator, et sur le net vous pourrez trouver les oeuvres d'autres codeurs étant partis de l'interface Iterator. Bon courage ! :D
0
Rejoignez-nous