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

22/08/2014

0

PHP

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
Celso Medeiros

Celso Medeiros

Responder

Posts

27/08/2014

Lucas Burg

Ola, da um var_dump nesse retorno amigo
Responder

27/08/2014

Celso Medeiros

Olá Burg,

Quando executo:
var_dump($VAR_ID_RETURN);

Obtenho de retorno:
string(0) ""

Alguma outra dica?
Responder

28/08/2014

Lucas Burg

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

28/08/2014

Celso Medeiros

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
Responder

02/09/2014

Celso Medeiros

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar