Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中将mssql转换为sqlsrv。存储过程成功时不返回正确的结果_Php_Sql Server_Stored Procedures_Sqlsrv - Fatal编程技术网

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

在php中将mssql转换为sqlsrv。存储过程成功时不返回正确的结果,php,sql-server,stored-procedures,sqlsrv,Php,Sql Server,Stored Procedures,Sqlsrv,我正在从PHP5.5.30升级到PHP7.2.7。所以我有从mssql到sqlsrv的切换代码。我有一个php,它运行一个带有输入参数的存储过程,输出结果,然后根据是否成功返回1或0,以及transNum。它正确地返回0,但如果成功,它将打印结果,但不返回任何内容 旧代码PHP: $transNum = 12; $dept = "fgr"; $reprint = 1; $query = mssql_init('STR_PrintBarcodeLabel', $conn); mssql_bind(

我正在从PHP5.5.30升级到PHP7.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];
$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 />";
                 update STR_ItemBarcodePrint

                 set printed = 'true'

                 where trans_num = @transNum



                 select 1, @transNum

          end

          else

          begin

                 select 0, @transNum

          end

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

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];
$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 />";
                 update STR_ItemBarcodePrint

                 set printed = 'true'

                 where trans_num = @transNum



                 select 1, @transNum

          end

          else

          begin

                 select 0, @transNum

          end

END
输入正确的transNum后,输出:

0
fgr
12
<blank line>
fgr
1234567
因此,正在调用存储过程并执行其任务,但成功调用后不再返回1。如果transNum无效或不是重新打印,则返回正确的结果0。当成功完成存储过程使用mssql时,是否存在使用sqlsrv不返回1的原因

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

我想
var\u dump
it?它是一个空字符串吗?一个空的?布尔值?查看返回值上的位。因此,我使用有效的transNum进行了var_转储,得到:
test1.php:37:boolean false
,然后使用无效的transNum,得到了
test1.php:37:array(size=3)0=>int 0'=>string'4606773'(length=7)1=>string'4606773'(length=7)
我认为这可能是您的问题:特别是括号?另外,您的代码有一个未关闭的
{
括号。这也是一个。谢谢。我一直在使用该资源从mssql切换到sqlsrv。我还使用了此代码
$query=“EXEC STR_printbarcodelab@transNum=?,@dept=?,@reprint=?”;
,得到了相同的结果。缺少的}在我写第一篇文章的时候是个打字错误。我猜如果sqlsrv_fetch_数组返回一个假布尔值,那么它似乎有一个错误。谢谢您的帮助。我发现一篇类似的帖子也建议使用
设置NOCOUNT ON。我将测试它,并更新主要职位,如果它的工作。