PHP从MSSQL存储过程获取返回值

时间:2014-08-20 19:12:48

标签: php sql-server stored-procedures sqlsrv

我无法从我的SQL Server(MSSQL 2012)SP获取OUTPUT参数以返回PHP。我的存储过程是:

CREATE PROCEDURE spGetNextSeqID @ID AS INT OUTPUT
AS
BEGIN
    BEGIN TRANSACTION
    SELECT @ID = SEQUENCE_NO + 1 FROM tblCSRSequence WITH (TABLOCKX)
    UPDATE tblCSRSequence SET SEQUENCE_NO=@ID
    COMMIT TRANSACTION
END

我的PHP代码是: -

<?php
include "DBConnect.php";
$conn = sqlsrv_connect( $serverName, $connection);
if( !$conn )
{
     echo "Connection could not be established to ".$serverName;
     die( print_r( sqlsrv_errors(), true));
}
$sql="{call dbo.spGetNextSeqID( ? )}";
$outSeq=0;
$params = array
    (
        array($outSeq, SQLSRV_PARAM_OUT)
    );

$stmt = sqlsrv_query( $conn, $sql, $params );

if( $stmt == false)
    die( print_r( sqlsrv_errors(), true) );

sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn );
echo $outseq;
?>

知道 SP正在调用并正常工作 - 我检查了一下跟踪,可以看到它产生了以下内容: -

declare @p1 varchar(max)
set @p1='154'
exec dbo.spGetNextSeqID @p1 output
select @p1

每次刷新浏览器页面时,它都会调用SP并将计数器递增1,但永远不会将值返回给调用的PHP函数。我已经习惯了这个约2天 - 我已经搜索了类似的帖子,但没有一个建议的修复(如SET NOCOUNT ON等)工作。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

新:

我错过了您使用单个参数作为输入和输出。请尝试以下方法。

array($outSeq, SQLSRV_PARAM_INOUT)

然后使用

sqlsrv_next_result($stmt);
echo $outSeq;

参考: http://technet.microsoft.com/en-us/library/cc644932(v=sql.105).aspx

旧:

您必须使用适当的数据类型设置$ outSeq。尝试将值初始化为$ outSeq = 0.00,因为输出类型为MONEY。

请参考以下文章:

http://technet.microsoft.com/en-us/library/cc626303(v=sql.105).aspx