在php中将mssql转换为sqlsrv。存储过程成功后不会返回正确的结果

时间:2018-07-18 17:13:46

标签: php sql-server stored-procedures sqlsrv

我将从php 5.5.30升级到php 7.2.7。所以我将代码从mssql切换到sqlsrv。我有运行带有输入参数的存储过程的php,它会打印结果,然后根据是否成功返回一个1或0,以及transNum。它正确返回0,但成功后将打印结果,但不返回任何内容。

旧代码PHP:

$transNum = 12;
$dept = "fgr";
$reprint = 1;
$query = mssql_init('STR_PrintBarcodeLabel', $conn);
mssql_bind($query, '@transNum', $transNum, SQLVARCHAR, false, false, 11);
mssql_bind($query, '@dept', $dept, SQLVARCHAR, false, false, 15);
mssql_bind($query, '@reprint', $reprint, SQLBIT, false, false, 1);
$result = mssql_execute($query);
$row = mssql_fetch_row($result);
mssql_free_statement($query);
echo $row[0];

这将打印到文件,如果成功,则返回1。

PHP:

$transNum = 12
$dept = "fgr";
$reprint = 1;

$query = "{call STR_PrintBarcodeLabel( ?, ?, ?)}";
$params = array( array($transNum, SQLSRV_PARAM_IN), 
                 array($dept, SQLSRV_PARAM_IN), 
                 array($reprint, SQLSRV_PARAM_IN));
$result = sqlsrv_query($conn, $query, $params);
$row = sqlsrv_fetch_array($result);
echo $row[0] . "<br />" . $dept . "<br />" . $transNum . "<br />";

输入不正确的transNum时,将输出:

0
fgr
12

输入正确的transNum时,其输出:

<blank line>
fgr
1234567

空白行应为1。

存储过程:

                 update STR_ItemBarcodePrint

                 set printed = 'true'

                 where trans_num = @transNum



                 select 1, @transNum

          end

          else

          begin

                 select 0, @transNum

          end

END

因此,存储过程被调用并执行其工作,但成功时不再返回1。如果transNum无效或不是重印,它将返回正确的结果0。使用mssql时,成功完成存储过程没有使用sqlsrv返回1的原因是否存在?

更新:已解决 解决方法是将SET NOCOUNT ON;添加到存储过程。谢谢大家。

0 个答案:

没有答案