MSSQL 預存程序使用 RETURN @int 回傳狀態碼(非 OUTPUT 參數),PHP 需透過 RETVAL 參數綁定取得。
<?php
$conn = mssql_connect('host', 'user', 'pass');
mssql_select_db('db', $conn);
$stmt = mssql_init('P__Global_Test', $conn) or die('Init SP failed');
$returnValue = 0;
// 關鍵:綁定 RETVAL,參數方向 true 表示輸出
mssql_bind($stmt, 'RETVAL', $returnValue, SQLINT4, true);
mssql_execute($stmt);
if ($returnValue == 0) {
echo 'ABCD'; // 成功
} else {
echo 'EFGH'; // 失敗
}
mssql_free_statement($stmt);
?>
CREATE PROCEDURE dbo.P__Global_Test
AS
SET NOCOUNT ON
IF NOT EXISTS (SELECT * FROM _Test)
RETURN 0
ELSE
RETURN 1
SET NOCOUNT OFF
GO
mssql_init() 建立陳述式控制代碼mssql_bind($stmt, 'RETVAL', $var, SQLINT4, true):RETVAL、型別 SQLINT4、true 表示輸出參數mssql_execute() 執行後 $returnValue 即被填入mssql_* 函數已移除(PHP 7+)$dbh = new PDO('sqlsrv:Server=host;Database=db', 'user', 'pass');
$stmt = $dbh->prepare('EXEC P__Global_Test');
$stmt->execute();
$returnValue = $stmt->fetchColumn(); // 直接取得 RETURN 值
echo $returnValue == 0 ? 'ABCD' : 'EFGH';