L'objet DB_result fournit deux fonctions pour traiter les rangées : fetchRow() et fetchInto().
fetchRow()retourne la rangée. fetchInto() a besoin d'une variable, à qui on assignerapar référence le contenu de la rangée du résultat et retournera DB_OK.
Le pointeur de résultats se déplacera à la ligne suivante à chaque appel de cette méthode. NULL est retourné lorsqu'il n'y a plus de résultat.
DB_Error est retourné si une erreur survient.
Exemple 34-1. Traiter les données d'un résultat
|
Les données d'une ligne issu du résultat d'une requête peuvent être placées dans l'un de ces trois constructeurs : un tableau trié (avec les numéros des colonnes comme clés), un tableau associatif (avec les noms des colonnes comme clés) ou un objet (avec les noms des colonnes comme propriétés).
DB_FETCHMODE_ORDERED (défaut)
Array ( [0] => 28 [1] => hi ) |
DB_FETCHMODE_ASSOC
Array ( [a] => 28 [b] => hi ) |
DB_FETCHMODE_OBJECT
stdClass Object ( [a] => 28 [b] => hi ) |
NOTE : Lorsqu'une requête contient plus d'une colonne du même nom (comme lorsque vous faîtes une jointure entre plusieurs tables qui possèdent des noms de colonnes portant le même nom) et que le mode est DB_FETCHMODE_ASSOC ou DB_FETCHMODE_OBJECT, les données de la dernière colonne portant le même nom seront les seules retournées. Il y a deux options pour contourner ce problème :
Utilisez des alias dans votre requêtes, par exemple People.Name AS PersonName |
Changez le mode en DB_FETCHMODE_ORDERED |
ASTUCE : Si vous êtes dans ce cas, c'est que votre schéma de base de données n'est pas bien pensé. Soit les données sont inutilement dupliquées, soit le même nom est utilisé pour des données différentes.
Vous pouvez définir le mode de récupération des données à chaque appel à la méthode et/ou vous pouvez définir le mode par défaut pour l'ensemble de l'instance DB en utilisant la méthode setFetchMode().
Exemple 34-2. A chaque appel
|
Exemple 34-3. Pour toute l'instance
|
Le système de traitement de PEAR DB supporte également un paramètre supplémentaire à la fonction de traitement. Vous pouvez ainsi récupérer les résultats par numéro. C'est particulièrelent pratique si vous souhaitez montrer l'ensemble du résultat (par exemple pour construire des listes HTML sur plusieurs pages) ou pour traiter les rangées dans un ordre spécial, etc.
Exemple 34-4. Traiter par nombre
|
L'objet DB_common fournit plusieurs méthodes pour récupérer les données facilement en combinant ce que vous avez défini comme mode pour le traitement de vos requêtes, en mettant les données retournées dans une structure de données PHP et en libérant de la mémoire les résultats. Ces méthodes incluent getOne(), getRow(), getCol(), getAssoc() et getAll().
Une fois que vous avez terminé d'utiliser le jeu de résultats, si votre script continue son exécution, cela peut être une bonne idée de libérer la mémoire allouée à ce jeu de résultats en utilisant la fonction free().
Exemple 34-5. Libération
|
Avec DB, il y a quatre manières de récupérer des informations intéressantes des jeux de résultats :
Exemple 34-6. numRows() retourne le nombre de lignes disponibles dans le jeu de résultats issu d'une requête SELECT
|
Exemple 34-7. numCols()retourne le nombre de colonnes disponibles dans le jeu de résultats issu d'une requêteSELECT
|
Exemple 34-8. affectedRows() retourne le nombres de lignes affectées par une requête du type INSERT, UPDATE ou DELETE
|
Exemple 34-9. tableInfo() retourne un tableau associatif contenant des informations sur les colonnes issues d'un résultat de requête du type SELECT
|
Précédent | Sommaire | Suivant |
Introduction - Requête | Niveau supérieur | Introduction - Préparer et Exécuter |