Executando um Procedimento Armazenado com pdo_sqlsrv

Estou tentando descobrir como executar um procedimento armazenado com php5.3 / pdo_sqlsrv no sql server 2008.

Encontrei este código:

$sql = new PDO( "sqlsrv:server=$server;Database = $database", $user, $password); $query = "{? = CALL sp_Login(?, ?)}"; $stmt = $sql->prepare( $query ); $returnVariable = 0; $inputVariable1 = 'input1'; $inputVariable2 = 'input2'; $stmt->bindParam(1,$returnVariable,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,100); $stmt->bindParam(2,$inputVariable1,PDO::PARAM_STR); $stmt->bindParam(3,$inputVariable2,PDO::PARAM_STR); $stmt->execute(); echo "Return value: ".$returnVariable; 

o procedimento armazenado tem dois parâmetros de input e um de saída, mas parece que não retorna nada, o valor de retorno ainda é 0 ..

Posso executar consultas selecionadas / inserir, então não é a conexão.

Existe alguma boa documentação sobre stored procedures com pdo_sqlsrv?

obrigado!

Depois de um dia de pesquisa eu encontrei uma maneira de chamar o sp … o problema era que o procedimento armazenado estava executando uma consulta de inserção e eu tive que chamar nextRowset () para obter o valor de retorno

http://social.msdn.microsoft.com/Forums/en/sqldriverforphp/thread/55f21fc5-dbc0-4fe4-a4ae-f15905a4293a

 $sql = new PDO( "sqlsrv:server=$server;Database = $database", $user, $password); $input1 = "input1"; $input2 = "input2"; $return_value = -1; $proc = '{? = CALL sp_Name (?, ?) }'; $stmt = $sql->prepare( $proc ); $stmt->bindParam(1,$return_value ,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,4); $stmt->bindParam(2,$input1,PDO::PARAM_STR); $stmt->bindParam(3,$input2,PDO::PARAM_STR); $stmt->nextRowset(); //skip INSERT result $result = $stmt->fetch(PDO::FETCH_ASSOC); /* Display the value of the output parameter */ echo "Return value: ".$return_value.'
';

Talvez este formulário que o manual seja útil

  // Example #4 Calling a stored procedure with an output parameter $stmt = $dbh->prepare("CALL sp_returns_string(?)"); $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); $stmt->execute(); print "procedure returned $return_value\n"; // Example #5 Calling a stored procedure with an input/output parameter $stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)"); $value = 'hello'; $stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); $stmt->execute(); print "procedure returned $value\n"; 

Seu proc armazenado precisava da instrução “SET NOCOUNT ON” para que a instrução Insert não exigisse que você chamasse o método nextRowset ().