我将从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;
添加到存储过程。谢谢大家。