Array
(
)

Problema: Não consigo receber no PHP retorno de Stored Procedure

PHP
Celso Medeiros
   - 22 ago 2014

Executo uma Store Procedure do SQL SERVER a partir do PHP.
Ele executa certinho, atualiza a tabela no banco, mas não consigo pegar o parâmetro de retorno no PHP.
O código que estou usando:
<?php
$serverName = "servatomo\sqlexpress"; //serverName\instanceName
$connectionInfo = array( "Database"=>"NomeBD", "UID"=>"NomeUsuario", "PWD"=>"SenhaUser");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if (!($conn)) {
echo "Conexão com o Banco de Dados com problemas !!!<br />";
die( print_r( sqlsrv_errors(), true));
}
$sql = " {call PROXIMO_ID(@VAR_TABELA=?, @VAR_ID_RETURN=?) } ";
$VAR_TABELA = 'CADASTRO';
$VAR_ID_RETURN = '';
$params = array(
array(&$VAR_TABELA, SQLSRV_PARAM_IN),
array(&$VAR_ID_RETURN, SQLSRV_PARAM_OUT)
);

$stmt = sqlsrv_prepare($conn,$sql,$params) or die(print_r(sqlsrv_errors(),true));
if ($stmt===false) {
echo 'Erro Prepare';
print_r(sqlsrv_errors(),true);
} else {
if (sqlsrv_execute($stmt)===false) {
print_r(sqlsrv_errors(),true);
echo 'Erro Execute';
} else {
echo 'Deu Certo';
}
echo '<br>[';
echo $VAR_ID_RETURN;
echo ']<br>';

Na tela do Browser verificamos que deu certo, mas não traz o parâmetro de retorno da SP.
Isto é o que é mostrado no browser após a execução:
Deu Certo
[]

Se alguém tiver uma dica agradeço,
Com a mesma conexão consigo fazer operações normais no banco (SELECT, INSERT, UPDATE, ...)
Rodo Stored Procedure, mas quando a Stored Procedure tem parâmetro de retorno não dá certo.
Abraços
Celso Medeiros

Burg
   - 27 ago 2014

Ola, da um var_dump nesse retorno amigo

Celso Medeiros
   - 27 ago 2014

Olá Burg,

Quando executo:
var_dump($VAR_ID_RETURN);

Obtenho de retorno:
string(0) ""

Alguma outra dica?

Burg
   - 28 ago 2014

Opa, posta a sua tabela que vou tentar simular hoje depois do trabalho. abç

Celso Medeiros
   - 28 ago 2014

Mudei a parte da chamado do prepare e do execute para query, mas continua não retornando.

a parte do código que alterei:
$stmt = sqlsrv_query($conn,$sql,$params);
sqlsrv_next_result ($stmt);

A stored procedure:
CREATE procedure [dbo].[PROXIMO_ID] (
@VAR_TABELA VARCHAR(60),
@VAR_ID_RETURN INTEGER OUTPUT
)
AS

BEGIN
IF @VAR_TABELA = 'CADASTRO'
SELECT @VAR_ID_RETURN = 1
ELSE
SELECT @VAR_ID_RETURN = 2

RETURN @VAR_ID_RETURN;
END

Celso Medeiros
   - 02 set 2014

Como não consegui resolver criei um webservice para poder dar continuidade a aplicação.