¿Cómo recorrer múltiples conjuntos de resultados del procedimiento almacenado en PHP?

Me estoy volviendo un poco loco tratando de obtener 3 conjuntos de resultados de un procedimiento almacenado (SP) en el servidor SQL 2008.

Procedimiento almacenado:

CREATE PROCEDURE db_abbTest
AS
BEGIN
        SET NOCOUNT ON;

        SELECT 1
        SELECT 2
        SELECT 3
        RETURN 0
END
GO

Código PHP:

<?php

$serverName = "server";
$connectionInfo = array("UID"=> "user", "PWD" =>"pass", "Database"=>"sample_db");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
    $sql = "db_AbbTest";
    $r = sqlsrv_query($conn, $sql, null, array(
            'Scrollable' => SQLSRV_CURSOR_STATIC,
            'SendStreamParamsAtExec'    => true
        ));
    var_dump($r);
        while( $obj = sqlsrv_fetch( $r))
        {
              var_dump($obj);
              var_dump(sqlsrv_fetch_array($r));
        }
     echo "Connection established.\n";
}
else
{
     echo "Connection could not be established.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Close the connection. */
sqlsrv_close( $conn);

El SP devuelve tres resultados (3 declaraciones de selección), sin embargo, parece que no puedo recuperar todos los resultados de la consulta. ¿Algunas ideas? Yo he tratado while(sqlsrv_fetch_object($r){//do something}) pero no suerte ..

preguntado el 02 de mayo de 12 a las 19:05

que resultado do ¿usted obtiene? Es decir, ¿cuáles son los resultados de var_dump? -

@Siva, ¿pensó que Pastebin era una solución aceptada para secciones de código bastante grandes? Wallyk me hago realidad var_dump($obj) y en blanco para el segundo.. -

1 Respuestas

Logré encontrar una solución a este problema, tuve que usar un ciclo while y luego pasar al siguiente resultado:

$sql = "{call db_AbbTest}";
$r = sqlsrv_query($conn, $sql, null);
$i =0;
    while( $obj = sqlsrv_fetch_object($r))
    {
            echo $i;
         print_r($obj);
         sqlsrv_next_result($r);
         $i++;
    }

contestado el 08 de mayo de 12 a las 09:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.