PHP 8.4 Essentials
Thème :
Junior
2 vues ·22/23 leçons

Récupérer les Résultats de Requêtes

PDO offre plusieurs façons de récupérer des données depuis la base de données. Choisissez la méthode adaptée à vos besoins.

fetch() — Une Seule Ligne

<?php
$stmt = $pdo->prepare('SELECT * FROM utilisateurs WHERE id = :id');
$stmt->execute([':id' => 1]);

$utilisateur = $stmt->fetch();
// Retourne une ligne ou false si non trouvé

if ($utilisateur) {
    echo $utilisateur['nom'];
}

fetchAll() — Toutes les Lignes

<?php
$stmt = $pdo->query('SELECT * FROM produits WHERE actif = 1');
$produits = $stmt->fetchAll();

foreach ($produits as $produit) {
    echo $produit['nom'] . ' : ' . $produit['prix'] . " €\n";
}

Modes de Récupération (Fetch Modes)

<?php
// Tableau associatif (le plus courant)
$ligne = $stmt->fetch(PDO::FETCH_ASSOC);
// ['id' => 1, 'nom' => 'Jean']

// Tableau indexé
$ligne = $stmt->fetch(PDO::FETCH_NUM);
// [0 => 1, 1 => 'Jean']

// Les deux à la fois
$ligne = $stmt->fetch(PDO::FETCH_BOTH);
// ['id' => 1, 0 => 1, 'nom' => 'Jean', 1 => 'Jean']

// Objet (stdClass)
$ligne = $stmt->fetch(PDO::FETCH_OBJ);
// stdClass { id: 1, nom: 'Jean' }

// Récupérer dans une classe spécifique
$utilisateur = $stmt->fetch(PDO::FETCH_CLASS, Utilisateur::class);

fetchColumn() — Une Valeur Unique

<?php
$stmt = $pdo->query('SELECT COUNT(*) FROM utilisateurs');
$nombre = $stmt->fetchColumn();
echo "Total d'utilisateurs : $nombre";

// Colonne spécifique (index 0)
$stmt = $pdo->query('SELECT id, nom, email FROM utilisateurs LIMIT 1');
$email = $stmt->fetchColumn(2); // Troisième colonne (email)

Itérer les Résultats

<?php
$stmt = $pdo->query('SELECT * FROM utilisateurs');

// Efficace en mémoire : récupère une ligne à la fois
while ($utilisateur = $stmt->fetch()) {
    echo $utilisateur['nom'] . "\n";
}

// Ou directement avec foreach
foreach ($stmt as $utilisateur) {
    echo $utilisateur['nom'] . "\n";
}

Récupérer en tant qu’Objets

<?php
class Utilisateur {
    public int $id;
    public string $nom;
    public string $email;
}

$stmt = $pdo->query('SELECT id, nom, email FROM utilisateurs');
$stmt->setFetchMode(PDO::FETCH_CLASS, Utilisateur::class);

foreach ($stmt as $utilisateur) {
    // $utilisateur est une instance de Utilisateur
    echo $utilisateur->nom;
}

// Ou tout récupérer en une fois
$utilisateurs = $stmt->fetchAll(PDO::FETCH_CLASS, Utilisateur::class);

Astuces Pratiques

<?php
// Vérifier si des résultats existent
$stmt->execute();
if ($stmt->rowCount() > 0) {
    // A des résultats
}

// Ou simplement
if ($utilisateur = $stmt->fetch()) {
    // Trouvé
} else {
    // Non trouvé
}

// Obtenir le nombre de colonnes
$nombreColonnes = $stmt->columnCount();

Exemples de code

Différentes stratégies de récupération

<?php
// 1. Listing paginé
function getUtilisateurs(PDO $pdo, int $page = 1, int $parPage = 10): array {
    $offset = ($page - 1) * $parPage;

    $stmt = $pdo->prepare(
        'SELECT * FROM utilisateurs ORDER BY cree_le DESC LIMIT :limite OFFSET :offset'
    );
    $stmt->bindValue(':limite',  $parPage, PDO::PARAM_INT);
    $stmt->bindValue(':offset',  $offset,  PDO::PARAM_INT);
    $stmt->execute();

    return $stmt->fetchAll();
}

// 2. Paires clé-valeur (utiles pour les listes déroulantes)
function getCategoriesPourSelecteur(PDO $pdo): array {
    $stmt = $pdo->query('SELECT id, nom FROM categories ORDER BY nom');
    return $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
    // Retourne : [1 => 'Électronique', 2 => 'Vêtements', ...]
}

// 3. Données groupées
function getUtilisateursParRole(PDO $pdo): array {
    $stmt = $pdo->query('SELECT role, nom FROM utilisateurs ORDER BY role, nom');
    return $stmt->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_COLUMN);
    // Retourne : ['admin' => ['Alice', 'Bob'], 'user' => ['Charlie', ...]]
}

// 4. Enregistrement unique avec gestion du null
function trouverUtilisateurOuEchouer(PDO $pdo, int $id): array {
    $stmt = $pdo->prepare('SELECT * FROM utilisateurs WHERE id = :id');
    $stmt->execute([':id' => $id]);

    $utilisateur = $stmt->fetch();

    if (!$utilisateur) {
        throw new RuntimeException("Utilisateur introuvable : $id");
    }

    return $utilisateur;
}
?>

Ressources


📘 Cette leçon fait partie du cours PHP Essentials sur la plateforme d’apprentissage RostoDev.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur Récupérer les Résultats de Requêtes. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.