存储过程为:USE [QPGameUserDB]
GOIF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[GSP_GP_IsLogin]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[GSP_GP_IsLogin]
GOSET QUOTED_IDENTIFIER ON 
GOSET ANSI_NULLS ON 
GOCREATE PROCEDURE [dbo].[GSP_GP_IsLogin]
@Accounts  [varchar](32),
@PassWord1  [char](32),
@PassWord2  [char](32),
@RegisterIP [varchar](15)
WITH ENCRYPTION AS
BEGIN IF (SELECT OlePassWord FROM AccountsInfo WHERE Accounts=@Accounts)=@PassWord2
BEGIN
SELECT 1
Update AccountsInfo Set LogonPass=@PassWord1,IsCheckPassWord=1,RegisterIP=@RegisterIP,LastLogonIP=@RegisterIP Where Accounts=@Accounts
RETURN
END
Else
BEGIN
SELECT 0
End
END
return 0
go
我写的PHP代码:
<?php
require_once("connect.php");
mssql_select_db('QPGameUserDB',$conn) or die ("select db error!");
if(isset($_POST['username'])){
$username=$_POST['username'];
}
if(isset($_POST['password'])){
$password=$_POST['password'];
}
$PassWord2=NULL;
$RegisterIP=$_SERVER['REMOTE_ADDR'];
$stmt=mssql_init("GSP_GP_IsLogin", $conn);
mssql_bind($stmt,"@Accounts",$username,SQLVARCHAR,false,false,32);
mssql_bind($stmt,"@PassWord1",$password,SQLCHAR,false,false,32);
mssql_bind($stmt,"@PassWord2",$PassWord2,SQLCHAR,false,true,32);
mssql_bind($stmt,"@RegisterIP",$RegisterIP,SQLVARCHAR,false,false,15);
$rs=mssql_execute($stmt,true);
print_r($rs);
mssql_close($conn);
?>请问该如何获取存储过程的返回值呢?谢谢大家了。

解决方案 »

  1.   

    用 return 并不能使存储过程返回结果.
    要使存储过程返回结果,必须采用 output 类型的参数,并在传递参数时注明为 output 类型,这样才能获得返回结果:
    create procedure get1
    (@returnval int output)
    as
    set @returnval=1
    go
    declare @v int
    exec get1 @v output
    select @v
    /*-----------
    1(1 行受影响)*/
    go
    drop procedure get1
      

  2.   

    参考以下例子
    use blpsjxc_ebaracreate procedure test_output(@colum varchar(100),@sql varchar(100) output) as 
    begin
    declare @s varchar(100)
    set @s='select ' +@colum+' from hpzl'
    set @sql=@s
    exec(@s)
    select @sql
    enddeclare @sql varchar(100)
    exec test_output 'hpmc',@sql output
      

  3.   


    存储过程是写死了的,我无法更改,它的存储过程是使用SELECT输出的值,成功的话输出1,否则输出0,我想获取它输出的1或0,在PHP中进行判断。
      

  4.   

    --或者利用这样,仅能得到一个int型的结果
    DECLARE @result int
    EXEC @result = [GSP_GP_IsLogin] @Accounts,@PassWord1,@PassWord2,@RegisterIP 
      

  5.   

    谢谢您的回答,我想获取存储过程执行完SELECT 输出的1或0,存储过程写死了,我无法更改,再次感谢您的帮助
      

  6.   

    如果在存储过程中用 select  输出值的话,那要建一个记录集,用类似于:
    set rs=conn.exec("exec proceurename")
    的方式获得记录集,再在rs中检查结果.
      

  7.   

    借助临时表吧
    create table #(ID int)
    insert # exec [dbo].[GSP_GP_IsLogin] ....
    再判断表中的值
      

  8.   


    谢谢您,存储过程我更改不了,无法直接获取SELECT输出的 0 1吗?
      

  9.   

    无法直接获取1楼存储过程SELECT输出的0或1吗?
      

  10.   


    MSSQL 存储过程不是那样写法的.
      

  11.   

    我在sql server management studio 里看数据库下的该存储过程的返回值为integer,无法直接获取它吗?我好郁闷呀!