共用方式為


如何:使用多個結果集

SQL Server Driver for PHP 提供了 sqlsrv_next_result 函數,好讓陳述式的下一個結果 (結果集、資料列計數或輸出參數) 為使用中。本主題示範如何使用 sqlsrv_next_result,從批次查詢的某個結果移到下一個結果。如需擷取預存程序傳回之輸出參數的範例,請參閱<sqlsrv_next_result>。

範例

下列範例會執行一個批次查詢,此查詢會針對指定的產品識別碼擷取產品評論資訊、插入產品的評論,然後再擷取指定之產品識別碼的產品評論資訊。新插入的產品評論將會併入批次查詢的最終結果集。此範例使用 sqlsrv_next_result,從批次查詢的某個結果移到下一個結果。

注意

批次查詢或預存程序傳回的第一個 (或唯一) 結果為使用中狀態,而不需要呼叫 sqlsrv_next_result

此範例使用 AdventureWorks 資料庫的 Purchasing.ProductReview 資料表,並假設此資料庫已安裝在伺服器上。當從命令列執行此範例時,所有輸出都會寫入主控台。

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

另請參閱

工作

範例應用程式

概念

有關文件集中的程式碼範例

其他資源

擷取資料
更新資料 (SQL Server Driver for PHP)
API 參考 (SQL Server Driver for PHP)