我无法从 PHP 获取存储过程中插入的返回 ID

时间:2021-02-07 03:03:17

标签: php tsql

我在 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

0 个答案:

没有答案