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 02/11/2006, 15h22   #1
Membre régulier
 
Inscription : avril 2003
Messages : 335
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 335
Points : 82
Points : 82
Par défaut Déplacement du curseur d'un recordset

Bonjour,

Je suis en train de tester PDO et je ne parviens pas à déplacer le curseur de mon recordset.

J'ai pourtant suivi la doc...


1/ La connexion, pas de problème.
Code :
1
2
3
4
5
try {
	$db = new PDO('pgsql:host=localhost; dbname=one', 'postgres', 'aaaa', array(PDO::ATTR_PERSISTENT => true));
} catch (PDOException $e) {
	echo 'Echec de la connexion : ' . $e->getMessage();
}
2/ Je récupère mon recordset en précisant bien PDO::CURSOR_SCROLL afin de pouvoir manipuler le curseur par la suite.
Code :
1
2
$rs = $db->prepare('SELECT * FROM membre ORDER BY 1 ASC', array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
$rs->execute();
3/ Je parcours mon rs, ok pas de souçis...
Code :
1
2
while ($res = $rs->fetch())
	echo $res['idm'],' ',$res[1],'<br />';
4/ Pour mon test je veux reprendre le 1er jeu de résultat en placant le curseur au début (comme on pourrait le faire via un mysql_data_seek), ici ça ne fonctionne pas. Rien ne s'affiche.
Code :
1
2
$res = $rs->fetch(PDO::FETCH_BOTH, PDO::FETCH_ORI_FIRST);
	echo $res['idm'],' ',$res[1],'<br />';
Voici la doc que j'ai consulté :
http://fr3.php.net/manual/fr/functio...ment-fetch.php

Merci.
dorian53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 14h58   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
je n'ai jamais utilisé PDO, mais as tu lu les commentaires utilisateurs de la page de la doc ? et si oui, quelle version de php as tu ?

Edit : apres avoir relu un peu la doc, rien n'indique que ce que tu veux faire est possible. Un "fetch" n'est pas un "seek". Tu indique juste la maniere dont PDO va parser les données avant de te les renvoyer, mais il ne les garde apparament pas en mémoire, c'est tout l'interet du "fetch"
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 09h11   #3
Membre régulier
 
Inscription : avril 2003
Messages : 335
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 335
Points : 82
Points : 82
Salut,

Je suis sous PHP Version 5.1.6.

C'est possible et assez explicite, il suffit de regarder le passage de paramètres :

mixed PDOStatement::fetch ( [int fetch_style [, int cursor_orientation [, int cursor_offset]]] )


cursor_orientation
Pour un objet PDOStatement représentant un curseur scrollable, cette valeur détermine quelle ligne sera retournée à l'appelant. Cette valeur doit être une des constantes PDO::FETCH_ORI_*, et par défaut, vaut PDO::FETCH_ORI_NEXT. Pour demander un curseur scrollable pour votre objet PDOStatement, vous devez définir l'attribut PDO::ATTR_CURSOR à PDO::CURSOR_SCROLL lorsque vous préparez la requête SQL avec la fonction PDO::prepare().


C'est pour cette raison que j'utilise PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL puis PDO::FETCH_ORI_FIRST, tel un "mysql_data_seek".
dorian53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 09h41   #4
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
En effet, j'avais lu la doc un peu vite.

Essaye de voir d'ou ca vient en reproduisant l'exemple de la page http://fr3.php.net/manual/fr/functio....php#AEN153477

et en changeant petit a petit les parametres pour voir ce qui pose probleme.

La premiere chose a faire est de trapper les exceptions pour voir si PDO te retourne qqchose, ensuite d'utiliser FETCH_NUM au lieu de BOTH, ainsi que d'essayer de spécifier des parametres explicites dans le premier fetch() (ORI_NEXT)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 11h19   #5
Membre régulier
 
Inscription : avril 2003
Messages : 335
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 335
Points : 82
Points : 82
Re,

J'avais essayé cet exemple et FETCH_NUM mais sans succès.

Il me semble avoir lu que de scroller le curseur sous mysql n'était pas encore possible, c'est sûrement le cas sous postgresql, mais jusqu'à quelle version ?

Je teste de suite sous PHP5.2...
dorian53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 11h34   #6
Membre régulier
 
Inscription : avril 2003
Messages : 335
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 335
Points : 82
Points : 82
Pas mieux
dorian53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 11h48   #7
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
aucune idée pour postgres... t'as testé avec un exemple équivalent a celui de la doc ? (en changeant juste la requete)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2006, 11h52   #8
Membre régulier
 
Inscription : avril 2003
Messages : 335
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 335
Points : 82
Points : 82
Oui exactement celui que tu as cité plus haut.
dorian53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h06.


 
 
 
 
Partenaires

Hébergement Web