Megosztás:


sqlsrv_next_result

PHP-illesztőprogram letöltése

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:

SQLSRV Driver API-referencia

A dokumentációban szereplő példakódokkal kapcsolatos

Adatok beolvasása

Adatok frissítése (Microsoft Drivers for PHP for SQL Server)

példaalkalmazás (SQLSRV-illesztőprogram)