Introduction - Récupération -- Récupération des lignes depuis une requête
Description
Fonctions de récupération
Pour pouvoir récupérer les données depuis une ressource de résultats, vous pouvez
utiliser une des méthodes suivantes :
fetchInto()
, fetchOne().
, fetchRow().
, fetchCol().
et fetchAll().
Toutes les méthodes ci-dessus, exceptée la méthode fetchOne(),
retournent les données demandées dans un tableau (multi-dimentionnel), NULL
s'il n'y a plus de données de disponible, ou un objet
MDB_Error, si une erreur survient.
Toutes les méthodes préfixés avec fetch() libèreront le
jeu de résultats une fois exécutée.
<?php
...
$db = MDB::connect($dsn);
$res = $db->query("SELECT * FROM mytable");
// Récupération de chaque ligne de données, à chaque
// itération, tant qu'il y a des données
while ($row = $db->fetchInto($res)) {
$id = $row[0];
}
// Si vous n'êtes intéressé que par la première colonne de la première ligne
$id = $db->fetchOne($res);
// Vu que les méthodes de récupération libèrent toujours
// le jeu de résultats, nous ne pouvons pas boucler sur le
// jeu de résultats mais, plutôt, choisir une autre méthode
// de récupération
$data = $db->getAll($res);
foreach($data as $row) {
$id = $row[0];
}
?>
Sélection du format de la ligne récupérée
Les modes de récupération supportés sont :
MDB_FETCHMODE_ORDERED (par défaut)
Les méthodes fetch*() retournent un tableau ordonné.
L'ordre est fourni par la requête.
$db = MDB::connect($dsn);
// ceci va définit un mode de récupération par défaut pour l'instance PEAR MDB
// (pour toutes les requêtes)
$db->setFetchMode(MDB_FETCHMODE_ASSOC);
$result = $db->query(...);
while ($row = $db->fetchRow($res)) {
$id = $row['id'];
}
Récupération des lignes par numéro
Le système de récupération PEAR MDB supporte également
un paramètre supplémentaire pour la requête de récupération.
Donc, vous pouvez récupérer les lignes depuis un résultat
par son numéro. Ceci est particulièrement utile si vous voulez
uniquement voir le jeu d'un résultat complet (par exemple,
lors de la pagination HTML), récupération des lignes dans un
ordre particulier, etc.
...
// la ligne de début de récupération
$from = 50;
// combien de résultats par page
$resPage = 10;
// la dernière ligne à récupérer pour cette page
$to = $from + $resPage;
foreach (range($from, $to) as $rowNum) {
if (!$row = $db->fetchInto($res, $fetchmode, $rowNum)) {
break;
}
$id = $row[0];
....
}
Libération du jeu de résultats
Il est recommandé de terminer le jeu de résultats après l'exécution
afin de préserver la mémoire.
Utilisez la méthode freeResult() pour cela.
...
$res = $db->query('SELECT * FROM clients');
while ($row = $res->fetchInto($res)) {
...
}
$db->freeResult($res);
Récupération rapide de données
MDB fournit des façons spéciales pour récupérer
de l'information depuis une requête sans avoir besoin
d'utiliser de méthodes fetch*()
et de boucler les résultats.
queryOne() récupère le premier résultat de la première colonne d'une
requête.
$numrows = $db->queryOne('select count(id) from clients');
queryRow() récupère la première ligne et la retourne sous la forme d'un tableau.
$sql = 'select name, address, phone from clients where id=1';
if (is_array($row = $db->queryRow($sql))) {
list($name, $address, $phone) = $row;
}
queryCol() retourne un tableau contenant les données des colonnes sélectionnées.
Elle accepte le numéro de la colonne à récupérer dans le second paramètre.
$all_client_names = $db->queryCol('SELECT name FROM clients');
getAll() récupère toutes les lignes retournées d'une requête.
Cette méthode a également plusieurs paramètres qui vous permettent
de retourner les données sous la forme d'un tableau associatif, en utilisant
la première colonne en tant que clé.
La famille de méthodes query*()
effectue tout le sal boulot à votre place, c'est-à-dire :
lancer la requête, récupérer les donées et libérer le
résultat. Notez que toutes les fonctions PEAR MDB
retournent un objet MDB_Error si une erreur
survient.
Récupération de plus d'informations depuis les résultats
Avec MDB, vous avez plusieurs amnières de récupérer
des informations utiles depuis les résultats. Elles sont :
numRows(): Retourne le nombre total de lignes retourné depuis une
requête "SELECT".
// Nombre de lignes
echo $db->numRows($res);
numCols(): Retourne le nombre total de colonnes retourné depuis
une requête "SELECT".
// Nombre de colonnes
echo $db->numCols($res);
affectedRows(): Retourne le nombre de lignes affectées par une requête de
manipulation de données ("INSERT", "UPDATE" ou "DELETE").
// Cette requête ne retourne pas d'objet résultat
$db->query('DELETE * FROM clients');
echo 'J\'ai effacé ' . $db->affectedRows() . ' clients.';
tableInfo(): Retourne un tableau associatif contenant les informations
sur les champs retournés d'une requête "SELECT".
// Information sur la table
print_r($db->tableInfo($res));
N'oubliez pas de vérifier si le résultat retourné par votre action
n'est pas un objet MDB_Error. Si vous obtenez un message
d'erreur comme << MDB_Error: database not capable >>,
cela signifie que votre gestionnaire de base de données ne supporte
pas cette action.