php调用sqlserver存储过程使用事务处理

第一次编写 sqlserver存储过程并在php里调用,把脑瓜都整大了,奋战了一天多最后还是搞定了。
实现功能:在 sqlserver里面实现事务处理,保证数据库操作安全;

接收sqlserver存储过程输出的各种状态的值。


sqlserver里面的存储过程如下:

ALTER PROC PK_Shop_Member
    @nUserID INT,
    @nMoney BIGINT,
    @DATE DATETIME,
    @nUserID2 INT,
    @nResult INT OUTPUT//此变量装载存储过程输出的值
WITH ENCRYPTION AS
BEGIN
    -- 属性设置
    SET NOCOUNT ON
    BEGIN TRY
        BEGIN TRANSACTION T
            UPDATE GaScoInfo SET Sco = Sco-@nMoney WHERE USER=@nUserID
            UPDATE [GameUser].[dbo].[Accounts] SET Mem = '1',MemberOverD = @DATE WHERE USER=@nUserID2
        COMMIT TRANSACTION T
        SET @nResult=3
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION T  
        SET @nResult=2
    END CATCH
END
RETURN 0
GO

php里面调用如下:

$db_host='******';
$db_user='='******';
$db_pass='='******';
$db_name='='******';
$nResult= '99';//此处为定义接收存储过程输出的变量
$db_connect=mssql_connect($db_host,$db_user,$db_pass);
$db_select=mssql_select_db($db_name,$db_connect);
$stmt = mssql_init("PK_Shop_Member", $db_connect);
mssql_bind($stmt,"@nUserID",'111',SQLINT4,FALSE,FALSE,30);
mssql_bind($stmt,"@nMoney",'222',SQLFLT8,FALSE,FALSE,30);
mssql_bind($stmt,"@Date",'2012-4-2 20:10:56',SQLVARCHAR,FALSE,FALSE,30);
mssql_bind($stmt,"@nUserID2",'465',SQLINT4,FALSE,FALSE,30);
mssql_bind($stmt,"@nResult",$nResult,SQLINT4,TRUE,FALSE,30); //为存储过程添加一个输出参数
if($rs=mssql_execute($stmt)){
    if($nResult=='99')exit('99');//网络异常
    elseif($nResult=='2')exit('2');//'网络异常
    elseif($nResult=='3')exit('1');//成功
}else{
    exit('3');//'网络异常,交易失败'
}


参考资料:http://www.wodeblog.com/archives/312



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值