Problema: Não consigo receber no PHP retorno de Stored Procedure
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
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
Curtidas 0
Respostas
Lucas Burg
22/08/2014
Ola, da um var_dump nesse retorno amigo
GOSTEI 0
Celso Medeiros
22/08/2014
Olá Burg,
Quando executo:
var_dump($VAR_ID_RETURN);
Obtenho de retorno:
string(0) ""
Alguma outra dica?
Quando executo:
var_dump($VAR_ID_RETURN);
Obtenho de retorno:
string(0) ""
Alguma outra dica?
GOSTEI 0
Lucas Burg
22/08/2014
Opa, posta a sua tabela que vou tentar simular hoje depois do trabalho. abç
GOSTEI 0
Celso Medeiros
22/08/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
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
GOSTEI 0
Celso Medeiros
22/08/2014
Como não consegui resolver criei um webservice para poder dar continuidade a aplicação.
GOSTEI 0