sqlsrv_next_result
Rend actif le prochain résultat (jeu de résultats, nombre de lignes ou paramètre de sortie) de l'instruction spécifiée.
Remarque : |
---|
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. |
Syntaxe
sqlsrv_next_result( resource $stmt )
Paramètres
$stmt : instruction exécutée sur laquelle le prochain résultat est rendu actif.
Valeur de retour
Si le prochain résultat est rendu actif avec succès, la valeur booléenne true est retournée. Si une erreur s'est produite au moment de rendre actif le prochain résultat, la valeur false est retournée. S'il n'y a plus de résultats disponibles, la valeur null est retournée.
Exemple
L'exemple suivant montre comment créer et exécuter une procédure stockée qui insère un comparatif de produit dans la table Production.ProductReview, puis sélectionne tous les comparatifs du produit spécifié. Après l'exécution de la procédure stockée, le premier résultat (nombre de lignes affectées par la requête INSERT dans la procédure stockée) est traité sans appel à sqlsrv_next_result. Le prochain résultat (lignes retournées par la requête SELECT dans la procédure stockée) est rendu disponible par l'appel de sqlsrv_next_result et est ensuite traité via sqlsrv_fetch_array.
Remarque : |
---|
L'appel des procédures stockées à l'aide de la syntaxe canonique est la pratique recommandée. Pour plus d'informations sur la syntaxe canonique, consultez Appel d'une procédure stockée. |
L'exemple suppose que SQL Server et la base de données AdventureWorks sont installés sur l'ordinateur local. 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));
}
/* Drop the stored procedure if it already exists. */
$tsql_dropSP = "IF OBJECT_ID('InsertProductReview', 'P') IS NOT NULL
DROP PROCEDURE InsertProductReview";
$stmt1 = sqlsrv_query( $conn, $tsql_dropSP);
if( $stmt1 === false )
{
echo "Error in executing statement 1.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Create the stored procedure. */
$tsql_createSP = " CREATE PROCEDURE InsertProductReview
@ProductID int,
@ReviewerName nvarchar(50),
@ReviewDate datetime,
@EmailAddress nvarchar(50),
@Rating int,
@Comments nvarchar(3850)
AS
BEGIN
INSERT INTO Production.ProductReview
(ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
VALUES
(@ProductID,
@ReviewerName,
@ReviewDate,
@EmailAddress,
@Rating,
@Comments);
SELECT * FROM Production.ProductReview
WHERE ProductID = @ProductID;
END";
$stmt2 = sqlsrv_query( $conn, $tsql_createSP);
if( $stmt2 === false)
{
echo "Error in executing statement 2.\n";
die( print_r( sqlsrv_errors(), true));
}
/*-------- The next few steps call the stored procedure. --------*/
/* Define the Transact-SQL query. Use question marks (?) in place of the
parameters to be passed to the stored procedure */
$tsql_callSP = "{call InsertProductReview(?, ?, ?, ?, ?, ?)}";
/* Define the parameter array. */
$productID = 709;
$reviewerName = "Customer Name";
$reviewDate = "2008-02-12";
$emailAddress = "customer@email.com";
$rating = 3;
$comments = "[Insert comments here.]";
$params = array(
$productID,
$reviewerName,
$reviewDate,
$emailAddress,
$rating,
$comments
);
/* Execute the query. */
$stmt3 = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt3 === false)
{
echo "Error in executing statement 3.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Consume the first result (rows affected by INSERT query in the
stored procedure) without calling sqlsrv_next_result. */
echo "Rows affectd: ".sqlsrv_rows_affected($stmt3)."-----\n";
/* Move to the next result and display results. */
$next_result = sqlsrv_next_result($stmt3);
if( $next_result )
{
echo "\nReview information for product ID ".$productID.".---\n";
while( $row = sqlsrv_fetch_array( $stmt3, SQLSRV_FETCH_ASSOC))
{
echo "ReviewerName: ".$row['ReviewerName']."\n";
echo "ReviewDate: ".date_format($row['ReviewDate'],
"M j, Y")."\n";
echo "EmailAddress: ".$row['EmailAddress']."\n";
echo "Rating: ".$row['Rating']."\n\n";
}
}
elseif( is_null($next_result))
{
echo "No more results.\n";
}
else
{
echo "Error in moving to next result.\n";
die(print_r(sqlsrv_errors(), true));
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt1 );
sqlsrv_free_stmt( $stmt2 );
sqlsrv_free_stmt( $stmt3 );
sqlsrv_close( $conn );
?>
Lors de l'exécution d'une procédure stockée ayant des paramètres de sortie, il est recommandé que tous les autres résultats soient traités avant d'accéder aux valeurs des paramètres de sortie. Pour plus d'informations, consultez Procédure : spécifier la direction du paramètre.
Voir aussi
Concepts
À propos des exemples de code dans la documentation