Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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 bijwerken (Microsoft-stuurprogramma's voor PHP voor SQL Server)