Share via


Procédure : utiliser plusieurs jeux de résultats

Le Pilote SQL Server pour PHP fournit la fonction sqlsrv_next_result afin de rendre actif le prochain résultat (jeu de résultats, nombre de lignes ou paramètre de sortie) d'une instruction. Cette rubrique montre comment utiliser sqlsrv_next_result pour passer d'un résultat d'une requête par lot au suivant. Pour obtenir un exemple de récupération d'un paramètre de sortie retourné par une procédure stockée, consultez sqlsrv_next_result.

Exemple

L'exemple suivant montre comment exécuter une requête par lot qui récupère les informations d'un comparatif de produit pour un ID de produit spécifique, insère un comparatif du produit, puis récupère à nouveau les informations du comparatif de produit pour l'ID de produit spécifié. Le comparatif de produit qui vient d'être inséré est inclus dans le jeu de résultats final de la requête par lot. L'exemple montre comment utiliser sqlsrv_next_result pour passer d'un résultat de la requête par lot au suivant.

Cc626309.note(fr-fr,SQL.90).gifRemarque :
Le premier (ou l'unique) résultat retourné par une requête par lot ou une procédure stockée est actif sans l'appel à sqlsrv_next_result.

L'exemple utilise la table Purchasing.ProductReview de la base de données AdventureWorks et suppose que cette base de données est installée sur le serveur. Toutes les données de sortie sont écrites dans la console lorsque l'exemple est exécuté à partir de la ligne de commande.

<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Could not connect.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Define the batch query. */
$tsql = "--Query 1
         SELECT ProductID, ReviewerName, Rating 
         FROM Production.ProductReview 
         WHERE ProductID=?;

         --Query 2
         INSERT INTO Production.ProductReview (ProductID, 
                                               ReviewerName, 
                                               ReviewDate, 
                                               EmailAddress, 
                                               Rating)
         VALUES (?, ?, ?, ?, ?);

         --Query 3
         SELECT ProductID, ReviewerName, Rating 
         FROM Production.ProductReview 
         WHERE ProductID=?;";

/* Assign parameter values and execute the query. */
$params = array(798, 
                798, 
                'CustomerName', 
                '2008-4-15', 
                'test@customer.com', 
                3, 
                798 );
$stmt = sqlsrv_query($conn, $tsql, $params);
if( $stmt === false )
{
     echo "Error in statement execution.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Retrieve and display the first result. */
echo "Query 1 result:\n";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ))
{
     print_r($row);
}

/* Move to the next result of the batch query. */
sqlsrv_next_result($stmt);

/* Display the result of the second query. */
echo "Query 2 result:\n";
echo "Rows Affected: ".sqlsrv_rows_affected($stmt)."\n";

/* Move to the next result of the batch query. */
sqlsrv_next_result($stmt);

/* Retrieve and display the third result. */
echo "Query 3 result:\n";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ))
{
     print_r($row);
}

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt );
sqlsrv_close( $conn );
?>

Voir aussi

Tâches

Exemple d'application

Concepts

À propos des exemples de code dans la documentation

Autres ressources

Récupération des données
Mise à jour des données (pilote SQL Server pour PHP)
Référence de l'API (Pilote SQL Server pour PHP)