Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Aktívvá teszi a megadott utasítás következő eredményét (eredményhalmaz, sorszám vagy kimeneti paraméter).
Megjegyzés:
A kötegelt lekérdezés vagy a tárolt eljárás által visszaadott első (vagy csak) eredmény aktív a sqlsrv_next_result hívása nélkül.
Szemantika
sqlsrv_next_result( resource $stmt )
Paraméterek
$stmt: A végrehajtott utasítás, amelyen a következő eredmény aktív lesz.
Visszaadott érték
Ha a következő eredmény sikeresen aktívvá vált, a logikai érték igaz lesz. Ha hiba történt a következő eredmény aktívvá tételében, a függvény hamis értéket ad vissza. Ha nincs több találat, a függvény null értéket ad vissza.
1. példa
Az alábbi példa létrehoz és végrehajt egy tárolt eljárást, amely beszúr egy termékértékelést a Production.ProductReview táblába, majd kiválasztja a megadott termékre vonatkozó összes felülvizsgálatot. A tárolt eljárás végrehajtása után a rendszer az első eredményt (az INSERT lekérdezés által érintett sorok számát a tárolt eljárásban) használja fel sqlsrv_next_result meghívása nélkül. A következő eredmény (a SELECT lekérdezés által a tárolt eljárásban visszaadott sorok) a sqlsrv_next_result meghívásával és a sqlsrv_fetch_array használatával történő felhasználásával érhető el.
Megjegyzés:
Ajánlott a tárolt eljárások meghívása a canonical szintaxis használatával. A canonical szintaxisról további információt a Tárolt eljárás meghívása című témakörben talál.
A példa feltételezi, hogy az SQL Server és az AdventureWorks adatbázis telepítve van a helyi számítógépen. A rendszer minden kimenetet a konzolra ír, amikor a példa a parancssorból fut.
<?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 );
?>
Kimeneti paraméterekkel rendelkező tárolt eljárás végrehajtásakor a kimeneti paraméterek értékeinek elérése előtt ajánlott az összes többi eredmény felhasználása. További információ : Paraméter irányának megadása az SQLSRV-illesztőprogram használatával.
2. példa
Az alábbi példa egy kötegelt lekérdezést hajt végre, amely lekéri egy adott termékazonosító termékértékelési adatait, beszúr egy felülvizsgálatot a termékhez, majd ismét lekéri a megadott termékazonosító termékértékelési adatait. Az újonnan beszúrt termékértékelés szerepelni fog a köteglekérdezés végső eredményhalmazában. A példa sqlsrv_next_result használ a kötegelt lekérdezés egyik eredményéről a következőre való váltáshoz.
Megjegyzés:
A kötegelt lekérdezés vagy a tárolt eljárás által visszaadott első (vagy csak) eredmény aktív a sqlsrv_next_result hívása nélkül.
A példa az AdventureWorks adatbázisPurchasing.ProductReview tábláját használja, és feltételezi, hogy az adatbázis telepítve van a kiszolgálón. A rendszer minden kimenetet a konzolra ír, amikor a példa a parancssorból fut.
<?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 );
?>
Lásd még:
A dokumentációban szereplő példakódokkal kapcsolatos
Adatok frissítése (Microsoft Drivers for PHP for SQL Server)