Cómo trabajar con varios conjuntos de resultados
El Controlador de SQL Server para PHP proporciona la función sqlsrv_next_result que activa el siguiente resultado (conjunto de resultados, recuento de filas o parámetro de salida) de una instrucción. En este tema se muestra cómo usar sqlsrv_next_result para moverse de un resultado a otro, en una consulta de proceso por lotes. Para obtener un ejemplo de cómo recuperar un parámetro de salida que devuelve un procedimiento almacenado, vea sqlsrv_next_result.
Ejemplo
En el ejemplo siguiente se ejecuta una consulta de proceso por lotes que recupera información de revisión del producto de un identificador de producto especificado, inserta una revisión del producto y, a continuación, vuelve a recuperar la información de revisión del producto para el identificador de producto especificado. La revisión del producto que se acaba de insertar se incluirá en el conjunto de resultados final de la consulta de proceso por lotes. En el ejemplo se usa sqlsrv_next_result para moverse de un resultado a otro, en la consulta de proceso por lotes.
Nota
El primer, o único, resultado que devuelve una consulta de proceso por lotes o procedimiento almacenado se activa sin llamar a sqlsrv_next_result.
En el ejemplo se usa la tabla Purchasing.ProductReview de la base de datos AdventureWorks y se supone que esta base de datos está instalada en el servidor. Todos los resultados se escriben en la consola cuando el ejemplo se ejecuta desde la línea de comandos.
<?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 );
?>
Vea también
Tareas
Conceptos
Acerca de ejemplos de código en la documentación
Otros recursos
Recuperar datos
Actualizar datos (Controlador de SQL Server para PHP)
Referencia de la API (Controlador SQL Server para PHP)