php 存储过程输出,php 调用sql server 的存储过程获得返回结果

php调用 (见下方)

execsql方法(见下方)

sql server 存储过程(见下方)

php 调用

$param = array(1);//值传入输入参数 输出参数不能输入

$ifRetVal = 1;

$sql_2='

declare @msg varchar(20),@returnValue int=0;

exec @returnValue=Pro_test_php @UserID = ?,@msg=?; --不要output 如果输出参数,名称相同,则不需要declare

select @returnValue;--获得返回值 ';

$s=CommonUtils::execsql($sql_2, $param, $ifRetVal);

execsql方法

public function execsql($sql, ...$args)

{

//$T = tools::inst();// 你的消息处理函数和工具函数

// 判断 $args 是否数组

if (!is_array($args)) {

// 消息处理

}

// 判断 $args 成员数

if (count($args) !== 2) {

// 消息处理

}

// 取参数

$param = $args[0];

$mark = $args[1];

// 判断 $param 是否数组

if (!is_array($param)) {

// 消息处理

}

// 判断 $mark

if ($mark !== 0 && $mark !== 1) {

// 消息处理

}

// 判断 $param 内参数个数与 $sql 中占位符的数量

$arrCount = count($param); // 数组成员数

//$charCount = count($T::charPoscheck($sql, '?')); // sql语句中问号的数量

//$charCount = 2; // sql语句中问号的数量

$charCount = substr_count($sql, '?');

// 只要结果集不要返回值时,参数个数必须与sql语句中的占位符数量相等

if ($mark === 0 && $arrCount !== $charCount) {

// 消息处理

}

// 同时需要结果集和返回值时,sql语句中的占位符比参数个数多一个(多一个出参,必须放在末尾)

if ($mark === 1 && ($arrCount + 1 !== $charCount)) {

// 消息处理

}

//$dbh = $this->getconn('web');// 你的PDO连接

$dbh = DB::connection()->getPdo();

// 预定义语句,把 $sql 语句告诉数据库

$stmt = $dbh->prepare($sql, array($dbh::ATTR_CURSOR => $dbh::CURSOR_SCROLL));

// 循环绑定入参

for ($i = 0; $i < $arrCount; ++$i) {

$stmt->bindParam($i + 1, $param[$i], $dbh::PARAM_STR);

}

// 绑定出参(这就是为何要判断参数个数与SQL语句中占位符数量的原因)

$retVal = null;

if ($mark === 1) {

$stmt->bindParam($arrCount + 1, $retVal, $dbh::PARAM_STR | $dbh::PARAM_INPUT_OUTPUT, 100);

}

// 执行并判断结果

if ($stmt->execute() === false) {

// 错误处理

}

$ret = array();

$res = null;

// 取得结果集

while ($res = $stmt->fetchAll($dbh::FETCH_NUM)) {

$ret = $res;

$stmt->nextRowset();

}

// 判断结果集

$retCount = count($ret);

if ($retCount < 1) {

$ret = array('nothing');

}

// 将返回值压入结果集数组末尾

if ($mark === 1) {

array_push($ret, $retVal);//文本

}

// 返回

return $ret;

}

sql server 存储过程

USE [MNE]

GO

/****** Object: StoredProcedure [dbo].[Pro_test_php] Script Date: 2018/12/21 10:43:24 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET NOCOUNT ON

GO

ALTER procedure [dbo].[Pro_test_php](@UserID int,@Msg varchar(100) output)

as

begin

if @UserID>0

begin

set @Msg='成功!'

return 1

end

set @Msg='失败!'

return 0

end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值