首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 呼叫 MSSQL 預存程序並透過 RETVAL 取得回傳值

     編輯:PHP 相關知識

核心概念

MSSQL 預存程序可透過 RETURN 陳述式回傳整數狀態碼(0 表成功、非 0 表錯誤代碼)。PHP 使用 mssql_bind 綁定特殊參數 RETVAL 即可捕獲此回傳值。

PHP 端實作

<?php
$conn = mssql_connect('server', 'user', 'password');
mssql_select_db('database', $conn);

// 初始化預存程序
$stmt = mssql_init('P__Global_Test', $conn) 
    or die("初始化預存程序失敗");

// 綁定 RETVAL 參數(重點:參數名稱必須為 "RETVAL",is_output = true)
$returnValue = 0;
mssql_bind($stmt, 'RETVAL', $returnValue, SQLINT4, true);

// 執行
mssql_execute($stmt);

// 判斷回傳值
if ($returnValue === 0) {
    echo 'ABCD - 執行成功';
} else {
    echo 'EFGH - 執行失敗,錯誤碼:' . $returnValue;
}

mssql_free_statement($stmt);
?>

MSSQL 預存程序範例

CREATE PROCEDURE dbo.P__Global_Test
AS
BEGIN
    SET NOCOUNT ON;
    
    IF NOT EXISTS (SELECT * FROM _Test)
    BEGIN
        RETURN 0;  -- 成功
    END
    ELSE
    BEGIN
        RETURN 1;  -- 失敗/特定錯誤
    END
    
    SET NOCOUNT OFF;
END
GO

關鍵參數說明

參數說明
RETVAL固定參數名,對應預存程序的 RETURN 值
SQLINT4資料型別:4 位元組整數(對應 MSSQL INT)
true (第 5 參數)is_output 必須為 true,表示這是輸出參數

進階:同時處理輸出參數與結果集

<?php
$stmt = mssql_init('usp_GetUser', $conn);

// 綁定輸入參數
mssql_bind($stmt, '@UserID', $userId, SQLINT4, false);

// 綁定輸出參數
mssql_bind($stmt, '@ErrorCode', $errorCode, SQLINT4, true);
mssql_bind($stmt, '@ErrorMsg', $errorMsg, SQLVARCHAR, true, false, 255);

// 綁定 RETVAL
mssql_bind($stmt, 'RETVAL', $retval, SQLINT4, true);

mssql_execute($stmt);

// 處理結果集
while ($row = mssql_fetch_assoc($stmt)) {
    // ...
}

echo "RETVAL: $retval, ErrorCode: $errorCode, ErrorMsg: $errorMsg";
?>

注意事項

  • mssql_* 函數已在 PHP 7.0 移除,新專案建議使用 PDO_SQLSRV 或 sqlsrv 擴展
  • 新版驅動使用 PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT 綁定輸出參數
  • 預存程序若有多個結果集,需用 mssql_next_result() 切換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved