laravel中执行mmsql的存储过程

对方提供的存储过程语句

DECLARE @return_value int,

  @rtncode int,

  @rtntext varchar(max)


EXEC @return_value = [dbo].[PD_API_GetUser]

  @user_id = 1,

  @rtncode = @rtncode OUTPUT,

  @rtntext = @rtntext OUTPUT


SELECT @rtncode as N'@rtncode',

  @rtntext as N'@rtntext'


下面是我封装的方法

public static function getConsumerInfo(){

        $result = array();

        $serverName = 'SD-20200000QYSI';//服务器名称

        $connectionInfo = array(

            'UID' => 'sa', //用户名

            'PWD' => '123456', //密码

            'Database' => 'test' //数据库名

        );

        $conn = sqlsrv_connect($serverName,$connectionInfo);

        if($conn == false) {

            $return = array(

                'status' => 0,

                'msg' =>'无法连接'

            );

            return $return;

        }

        //调用存储过程

        $tsql_callSP = "

begin

declare @return_value int;

declare @rtncode int;

declare @rtntext varchar(max);


exec @return_value = dbo.PD_API_GetUser

@user_id = 1,

@rtncode = @rtncode OUTPUT,

@rtntext = @rtntext OUTPUT;


SELECT @rtncode as N'@rtncode',

                                @rtntext as N'@rtntext';

end

";

        $statement = sqlsrv_query($conn,$tsql_callSP);

        if($statement === false) {

            $errors = sqlsrv_errors(SQLSRV_ERR_ALL);

            if(!is_null($errors)) {

                header("Content-type:text/html;charset=GBK");    //转gbk为了方便看错误信息调试

                die( print_r( sqlsrv_errors(), true));

            }

            return false;

        }

        if($statement === false){

            $result = array(

                'status' => 0,

                'msg' => '调用存储过程错误'

            );

            return $result;

        }


        while($row = sqlsrv_fetch_array($statement,SQLSRV_FETCH_ASSOC)){

            $result = $row;

        }

        //关闭释放连接

        sqlsrv_free_stmt($statement);

        sqlsrv_close($conn);

        return $result;

    }


咋一看跟sqlserver的语法差不多,有个地方稍不注意就gg了

image.png

基本复制粘贴过去,改下配置就能直接用

发表评论