Share via


sqlsrv_next_result

PHP-stuurprogramma downloaden

Hiermee wordt het volgende resultaat (resultatenset, aantal rijen of uitvoerparameter) van de opgegeven instructie actief.

Opmerking

Het eerste (of enige) resultaat dat wordt geretourneerd door een batchquery of opgeslagen procedure, is actief zonder aanroepen van sqlsrv_next_result.

Syntaxis

  
sqlsrv_next_result( resource $stmt )  

Parameterwaarden

$stmt: De uitgevoerde instructie waarop het volgende resultaat actief wordt gemaakt.

Retourwaarde

Als het volgende resultaat actief is gemaakt, wordt de Booleaanse waarde true geretourneerd. Als er een fout is opgetreden bij het actief maken van het volgende resultaat, wordt false geretourneerd. Als er geen resultaten meer beschikbaar zijn, wordt null geretourneerd.

Voorbeeld 1

In het volgende voorbeeld wordt een opgeslagen procedure gemaakt en uitgevoerd waarmee een productbeoordeling wordt ingevoegd in de tabel Production.ProductReview en vervolgens alle beoordelingen voor het opgegeven product worden geselecteerd. Na de uitvoering van de opgeslagen procedure wordt het eerste resultaat (het aantal rijen dat wordt beïnvloed door de INSERT-query in de opgeslagen procedure) gebruikt zonder sqlsrv_next_result aan te roepen. Het volgende resultaat (de rijen die worden geretourneerd door de SELECT-query in de opgeslagen procedure) worden beschikbaar gesteld door sqlsrv_next_result aan te roepen en te gebruiken met behulp van sqlsrv_fetch_array.

Opmerking

Het aanroepen van opgeslagen procedures met behulp van canonieke syntaxis is de aanbevolen procedure. Zie Een opgeslagen procedure aanroepen voor meer informatie over canonieke syntaxis.

In het voorbeeld wordt ervan uitgegaan dat SQL Server en de AdventureWorks-database op de lokale computer zijn geïnstalleerd. Alle uitvoer wordt naar de console geschreven wanneer het voorbeeld vanaf de opdrachtregel wordt uitgevoerd.

<?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 affected: ".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 );  
?>  

Bij het uitvoeren van een opgeslagen procedure met uitvoerparameters wordt aanbevolen dat alle andere resultaten worden gebruikt voordat u de waarden van uitvoerparameters opent. Zie Voor meer informatie : Parameterrichting opgeven met behulp van het SQLSRV-stuurprogramma.

Voorbeeld 2

In het volgende voorbeeld wordt een batchquery uitgevoerd waarmee productbeoordelingsgegevens voor een opgegeven product-id worden opgehaald, een beoordeling voor het product wordt ingevoegd en vervolgens opnieuw de productbeoordelingsgegevens voor de opgegeven product-id worden opgehaald. De nieuw ingevoegde productbeoordeling wordt opgenomen in de uiteindelijke resultatenset van de batchquery. In het voorbeeld wordt sqlsrv_next_result gebruikt om van het ene resultaat van de batchquery naar het volgende te gaan.

Opmerking

Het eerste (of enige) resultaat dat wordt geretourneerd door een batchquery of opgeslagen procedure, is actief zonder aanroepen van sqlsrv_next_result.

In het voorbeeld wordt de tabel Purchasing.ProductReview van de AdventureWorks-database gebruikt en wordt ervan uitgegaan dat deze database op de server is geïnstalleerd. Alle uitvoer wordt naar de console geschreven wanneer het voorbeeld vanaf de opdrachtregel wordt uitgevoerd.

<?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 );  
?>  

Zie ook

API-verwijzing voor SQLSRV-stuurprogramma's

Over codevoorbeelden in de documentatie

Gegevens ophalen

Gegevens bijwerken (Microsoft-stuurprogramma's voor PHP voor SQL Server)

voorbeeldtoepassing (SQLSRV-stuurprogramma)