我在 SQL Server 上有一个存储过程,它工作正常并相应地返回正确的值。
问题是当我想在插入后在 PHP 上获取它的返回值时
我看到了类似的问题,但我认为与此相去甚远
SQL 代码:
ALTER PROCEDURE [dbo].[AddBox]
@boxName VARCHAR(30),
@boxDesc VARCHAR(140),
@error VARCHAR(50) OUTPUT
AS
BEGIN TRY
IF (ISNULL(@boxName,'') = '')
BEGIN
SET @error = 'error 1'
RETURN -100
END
BEGIN TRANSACTION
INSERT INTO TB_Boxes (boxName, boxDesc)
VALUES (@boxName, @boxDesc)
DECLARE @ID INT
SET @ID = @@IDENTITY
COMMIT TRANSACTION
SET @error = 'OK'
RETURN @ID
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
RETURN -1
END CATCH
GO
PHP 代码:
$sql = "EXEC ? = AddBox ?,?,?";
$return = 0;
$boxName = $_POST['boxName'];
$boxDesc = $_POST['boxDesc'];
$error = "";
$param1 = array(&$return, SQLSRV_PARAM_OUT);
$param2 = array($boxName, SQLSRV_PARAM_IN);
$param3 = array($boxDesc, SQLSRV_PARAM_IN);
$param4 = array(&$error, SQLSRV_PARAM_OUT);
$params = array($param1, $param2, $param3, $param4);
$stmt = sqlsrv_query($conn, $sql, $params);
if( $stmt === false ) {
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
}
echo "ID:" . $return . "<br>";
echo "error:" . $error;
如果 boxName 为空,php 显示 $return ("-100") 和 $error ("error 1") 但是当存储过程执行插入时,我得到我设置的值
PHP 向我展示:
ID: 0
error:
我不知道为什么不起作用
注意事项: PHP 版本:7.2.34