Sqlsrv没有读取存储过程的响应

I am using the sqlsrv driver and I have been getting data from the server just fine, using "sqlsrv_query" I have called many procedures and everything works fine, but it does not work with one procedure.

All the previous Stores Procedures just made selects to the database, but this one first inserts some info in the table and then it returns a value (I wonder if this is what is causing the issue). And here I can't read the value

I call the SP like this

$consulta = "exec TP_APP_WEB @CONTRATO = '2007061006201', @AFILIADO = '2007060389', @CODIGO_PRESTADOR = '00018', @OP = 'I'";

and then I execute the query using "sqlsrv_query" or "sqlsrv_execute"

and I am trying to read the response in many ways:

sqlsrv_fetch sqlsrv_get_field sqlsrv_fetch_object sqlsrv_fetch_array

and none of them read the response.

I am getting no error, just empty rows, where the response should be.

EDIT: This is the whole SP


select @maximo = max(orde_nume) from cap_tbl_orden_atencion where orde_sucu = '001' 

select 
    @anio_contrato = afco_anio, @mes_contrato = afco_mes, @tipo_contrato = afco_tipo, @numero_contrato = afco_nume, @anio_afiliado = afco_afan,
    @mes_afiliado = afco_afme, @numero_afiliado = afco_afnu, @plan = afco_plan, @porcentaje = porc_red, @codigo_contratante = CONT_CONT
from 
    cap_tbl_afiliado_por_contrato 
    inner join cap_tbl_copago_por_plan on afco_plan = cod_plan AND tipo_prestacion = '0101' and cobertura = '00'
    INNER JOIN CAP_TBL_CONTRATOS ON CONT_ANIO+CONT_MES+CONT_TIPO+CONT_NUME = afco_anio+afco_mes+afco_tipo+afco_nume
where 
    afco_anio+afco_mes+afco_tipo+afco_nume = @contrato and afco_afan+afco_afme+afco_afnu = @AFILIADO and afco_esta = 'A' 


 select @periodo =  max(periodo) from CAP_TBL_PERIODO_POR_CONTRATO where anio+mes+tipo+contrato = @CONTRATO
 if @maximo is null 
 set @maximo = 0 
 set @maximo = @maximo +1 

 set @NUMERO_ODA = right('0000000'+convert(varchar(7), @maximo), 7) 

SELECT @DESC_MOTIVO= 'ODA : '+@NUMERO_ODA, @fecha = getdate()

 IF @MAXIMO2 IS NULL 
 SET @MAXIMO2 = 0 
 SET @MAXIMO2 = @MAXIMO2 +1 

INSERT INTO CAP_TBL_AUTORIZACION_PROCESO 
 VALUES('001', @MAXIMO2, 54, @FECHA, @NUMERO_ODA, 0, 0, @desc_motivo, @DESC_MOTIVO, '197', '000', 0, 'A', GETDATE(), @anio_contrato, @mes_contrato, 
 @tipo_contrato, @numero_contrato) 

 insert into cap_tbl_orden_atencion 
 values ('001', @NUMERO_ODA, '01', GETDATE(), @CODIGO_PRESTADOR, @TIPO_PRESTADOR, @anio_contrato, @mes_contrato, @tipo_contrato, @numero_contrato, 
 @codigo_contratante, @tipo_contrato, @anio_afiliado, @mes_afiliado, @numero_afiliado, '', '', '', '', '0101', @porcentaje, @VALOR_ODA, 0, @valor_oda, 
 @VALOR_AFILIADO, @VALOR_CUBIERTO, @VALOR_CUBIERTO, @VALOR_AFILIADO, 'ODA WEB', 'C', 'A', '197', 'Z01', @TIPO_PRESTADOR, @CODIGO_PRESTADOR, @PLAN, '01', 
 0, @periodo, GETDATE(), 'N', '001', 0, DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), '00', 
 0, 0, 0, DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), '000', 0, 0, 0, '000', 
 0, '197', GETDATE(), '197', GETDATE(), '0101', '', '01', '01', 'N', '001', 0, 'WEB', 0, '01', '01') 

 SET @PRESTACION = '01-01-01-99961'

 if (@plan = 1 and @PLAN_PRESTADOR = 1) or (@plan = 2 and @PLAN_PRESTADOR = 2) or (@plan = 2 and @PLAN_PRESTADOR = 1)
    SET @PRESTACION = '01-01-01-99961'
 IF @PLAN = 1 AND @PLAN_PRESTADOR = 2
    SET @PRESTACION = '01-01-01-99993'
 IF @PLAN = 1 AND @PLAN_PRESTADOR = 3
    SET @PRESTACION = '01-01-01-99994'
 IF @PLAN = 2 AND @PLAN_PRESTADOR = 3
    SET @PRESTACION = '01-01-01-99995'
 IF @PLAN = 3 AND @PLAN_PRESTADOR = 1
    SET @PRESTACION = '01-01-01-99989'
 IF @PLAN = 3 AND @PLAN_PRESTADOR = 2
    SET @PRESTACION = '01-01-01-99988'
 IF @PLAN = 3 AND @PLAN_PRESTADOR = 3
    SET @PRESTACION = '01-01-01-99962'
INSERT INTO 
        CAP_TBL_DETALLE_ADICIONAL_ORDEN 
    VALUES( '001' , @NUMERO_ODA , 'PR' , 1 , '01' , '01', @PRESTACION , @VALOR_ODA , @PORCENTAJE , @VALOR_CUBIERTO , @VALOR_AFILIADO , '0101', 
 'A',@VALOR_ODA,3.29, @PLAN , '01' , 'Z10' , @tipo_prestador , @CODIGO_PRESTADOR , 1 , @VALOR_ODA , @VALOR_ODA, 0, @VALOR_ODA, @VALOR_ODA, 0, 0, 
 @VALOR_ODA, @porcentaje, @VALOR_AFILIADO, @VALOR_CUBIERTO) 

 update a               
set a.periodo_contrato = b.periodo              
from cap_tbl_ORDEN_ATENCION a,cap_tbl_periodos_por_contrato b               
where  a.ORDE_SUCU = '001' and a.ORDE_NUME = @NUMERO_ODA and              
a.ORDE_FECH between fecha_inicio and fecha_final and a.ORDE_COAN = B.anio and               
a.ORDE_COME = B.mes  and a.ORDE_COTI = B.tipo and a.ORDE_CONU = B.contrato   

insert into  tbl_consumos              
select sucursal,NUMERO,cod_cobertura,tipoprestacion,'000',sum(a.COBERTURA)              
from               
cap_tbl_detalle_ADICIONAL_ORDEN a              

where a.sucursal = '001' and A.NUMERO = @NUMERO_ODA

group by              
sucursal,A.NUMERO,cod_cobertura,TIPOPRESTACION        

select @tipo_s = sec_factura from CARTERA..ccb_tbl_caja where caja_sucu = '001' and usuario = 197 

SELECT @MAXIMO = SECUENCIA FROM CARTERA..CCB_TBL_SECUENCIA WHERE sucursal = '001' and TIPO = 'CA' 

IF @MAXIMO IS NULL 
SET @MAXIMO = 0 
SET @MAXIMO = @MAXIMO +1 

SELECT @NUMERO_FACTURA = SECUENCIA 
,@NRO_DOCUMENTO_P1= SECUENCIA_P1,@NRO_DOCUMENTO_P2= SECUENCIA_P2,@NRO_AUTORIZACION = 0 
 FROM CARTERA..CCB_TBL_SECUENCIA WHERE 
sucursal = '001' and 
TIPO = @TIPO_S 
IF @NUMERO_FACTURA IS NULL 
SET @NUMERO_FACTURA = 0 
SET @NUMERO_FACTURA = @NUMERO_FACTURA +1 


SET @NRO_DOCUMENTO_P3= RIGHT('0000000'+CONVERT(VARCHAR(10),@NUMERO_FACTURA),7) 

INSERT INTO CARTERA..CCB_TBL_CABECERA_RECIBO_CAJA 
VALUES('001', @MAXIMO, convert(date,@FECHA), @anio_contrato, @mes_contrato, @tipo_contrato, @numero_contrato, @codigo_contratante, 
    @VALOR_AFILIADO, 0, 0,0, 0,@VALOR_AFILIADO, '00', @fecha, 0, 'NV',@TIPO_S, @NUMERO_FACTURA, 'O', @NRO_DOCUMENTO_P1,@NRO_DOCUMENTO_P2,@NRO_DOCUMENTO_P3,
    @NRO_AUTORIZACION, @anio_afiliado,@mes_afiliado,@numero_afiliado,'O','O','001',0, 197,@FECHA,197, @fecha,
    CASE WHEN @TIPO_S IN ('F28','F30','F31','F32','F33','F34','F35','F36','F37') THEN 'I' ELSE NULL END ,NULL,NULL,NULL,NULL,NULL,NULL,NULL ,'C' 

) 

UPDATE CARTERA..CCB_TBL_SECUENCIA SET SECUENCIA = SECUENCIA +1 
WHERE sucursal = '001' and TIPO = 'CA' 

UPDATE CARTERA..CCB_TBL_SECUENCIA SET SECUENCIA = SECUENCIA +1 
WHERE sucursal = '001' and TIPO = @TIPO_S 

INSERT INTO CARTERA..CCB_TBL_DETALLE_RECIBO_CAJA                                                            
VALUES('001', @MAXIMO, 1, @anio_contrato,@mes_contrato,@tipo_contrato,@numero_contrato,'03','001',@NUMERO_ODA,@VALOR_AFILIADO)

EXEC CARTERA..CCB_PRO_MAN_DETALLE_RECIBO_CAJA 'F', '001', @maximo

INSERT INTO CARTERA..CCB_TBL_FORMA_PAGO_RECIBO 
VALUES('001', 'OD', @MAXIMO, 1, '03', 'TJ', @ENTIDAD, @CUENTA, 0, @VALOR_AFILIADO, '00',0, convert(date,@FECHA) , 
    'A', @fecha, 0,0, '090', '000', '197', @fecha,'197',@fecha ,'' ,'N','N',1) 

select @NUMERO_ODA "NUMERO_ODA"```

Explanations:

One possible reason, that explains this unexpected behavior, is that your stored procedure probably returns multiple result sets. Use sqlsrv_next_result() to make each result active.

<?php
...
// Call stored procedure
$sql = "exec TP_APP_WEB @CONTRATO = '2007061006201', @AFILIADO = '2007060389', @CODIGO_PRESTADOR = '00018', @OP = 'I'";
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

// Fetch data
do {
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
        print_r($row, true);
    }
} while (sqlsrv_next_result($stmt));
...
?>

Notes:

If you have INSERT, DELETE or UPDATE statements, using SET NOCOUNT ON as first row in your stored procedure prevents sending information about the count of the affected rows as result set.