在php中将mssql转换为sqlsrv。存储过程成功时不返回正确的结果
我正在从PHP5.5.30升级到PHP7.2.7。所以我有从mssql到sqlsrv的切换代码。我有一个php,它运行一个带有输入参数的存储过程,输出结果,然后根据是否成功返回1或0,以及transNum。它正确地返回0,但如果成功,它将打印结果,但不返回任何内容 旧代码PHP:在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(
$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代码>。我将测试它,并更新主要职位,如果它的工作。