Maison >base de données >tutoriel mysql >Comment récupérer plusieurs ensembles de résultats à partir d'une seule requête PDO ?

Comment récupérer plusieurs ensembles de résultats à partir d'une seule requête PDO ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-17 12:06:02963parcourir

How to Retrieve Multiple Result Sets from a Single PDO Query?

Requêtes multiples PDO : récupération de plusieurs ensembles de résultats

PHP 5.3 a introduit la prise en charge de plusieurs requêtes dans le pilote PDO_MYSQLND, vous permettant d'exécuter plusieurs SELECT requêtes en un seul appel. Cependant, récupérer les ensembles de résultats de ces requêtes peut prêter à confusion.

Considérez la requête suivante :

$db->query("SELECT 1; SELECT 2;")

Cette requête exécute deux requêtes SELECT. La méthode fetchAll(PDO::FETCH_ASSOC) est ensuite utilisée pour récupérer le jeu de résultats. Cependant, cela ne renvoie que les résultats de la première requête :

array(1) {
  [0] =>
  array(1) {
    [1] =>
    string(1) "1"
  }
}

Utilisation de PDOStatement::nextRowset

Pour récupérer les résultats de la deuxième requête, vous devez utilisez la méthode PDOStatement::nextRowset. Cette méthode vous permet de déplacer le curseur d'instruction vers l'ensemble de résultats suivant :

$stmt = $db->query("SELECT 1; SELECT 2;");
$stmt->nextRowset();
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));

Cela renverra les résultats de la deuxième requête :

array(1) {
  [0] =>
  array(1) {
    [2] =>
    string(1) "2"
  }
}

Styles FETCH multiples

L'avantage d'utiliser PDOStatement::nextRowset est qu'il vous permet de récupérer chaque requête en utilisant différents styles FETCH. Par exemple :

$stmt = $db->query("SELECT 1; SELECT 'a';");
$stmt->nextRowset();
$first = $stmt->fetchColumn(); // fetch first column of second query
$stmt->nextRowset();
$second = $stmt->fetch(PDO::FETCH_ASSOC); // fetch associative array of third query

Cela vous offre une plus grande flexibilité lorsque vous travaillez avec plusieurs requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn