fonctionnement de la méthode PDOStatement::fetch()

Eléphanteau du PHP | 17 Messages

11 juil. 2008, 14:59

Bonjour.
Je cherches une explication sur le fonctionnement de la fonction fetch.
Je conçoit un forum en PHP5 en utilisant le design pattern singleton.
Pour les contact à ma base de données j'utilise une classe MySqlBD qui contient des méthodes appellées par une classe TraitementBD (qui initialise la connection à la base et la ferme).
Dans mes script d'affichage j'appelle les méthodes spécifiques de TraitementBD à travers mon singleton.
Mon problème est que je stocke par exemple mes résultats dans des variables et que je veux utiliser ces resultats plusieurs fois dans mon script, par exemple pour un affichage [en utilisant le bete while($toto = $resultat-fecth() ] et en passant ce resultat en paramètre.
Or quand je souhaite faire ceci je m'aperçois que je ne peux en fait faire que l'une de ces choses, comme si ma variable qui stocke le résultat de ma requête se déchargait après etre utilisé.
Aisni si je passe ma variable en paramètre, je ne peux faire l'affichage, et inversement si je fais l'affichage je ne peux pas passer ma variable en paramètre.
Je cherche donc à comprendre le fonctionnement de la méthode fecth() pour comprendre pourquoi cela fait cela et comment pallier ensuite à ce problème.
Merci pour vos réponses.
Modifié en dernier par kaljerhom le 11 juil. 2008, 15:29, modifié 1 fois.

Eléphant du PHP | 288 Messages

11 juil. 2008, 15:27

Tu n'as qu'a utiliser fetchall. qui va te retourner un tableau avec tous tes resultats et ensuite tu manipule le tableau. Si je ne m'abuse ton problème survient parce que quand tu fais un while sur un resultat, le pointeur se deplace et se positionne à la fin. Voilà.
http://ca3.php.net/manual/fr/pdostatement.fetchall.php


[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphanteau du PHP | 17 Messages

11 juil. 2008, 15:28

Oui mais pourtant quand je passe le resultat en paramètre d'une méthode avant de faire fetch() ca marche pas non plus. :?
Qq un peut m'expliquer la différence entre fetch() et fetchAll(), car j'ai lu les explications dans PhpManual mais j'ai pas tout compris. :oops:

Eléphant du PHP | 288 Messages

11 juil. 2008, 15:44

avec la methode fetch, tu peux choisir comment tu veux tes resultats, sous forme de tableau associatif etc...et de plus il te faut boucler dessus car tu auras une ligne a la fois. Alors que fetchall te retourne tous les enregistrements dans un tableau ou chaque cellule du tableau est un tableau.

exemple:
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)

[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)

)
Donc pour acceder au premier enregistrement et avoir la valeur de ma colonne name je peux faire ceci:
tableau[0]["name"] ou tableau[0][0] les deux sont possibles.