Yii2调用mysql存储过程获取返回值

3 篇文章 0 订阅
最近在做yii2调用mysql存储过程并接收返回值的功能,网上搜到的资料比较零散(也许最大的原因是我不太会搜(。﹏。*)。)但是最终总算把这个功能给搞出来了,特此记录一下,如果有遇到同样需求的战友可以参考一下,下面贴出调用的php代码:
$reg = "davafy@davafy.com";
$cmd = Yii::$app->db->createCommand("call test1(:reg,@s)");
$cmd->bindParam(':reg',$reg,\PDO::PARAM_STR,50);
$res = $cmd->queryOne();
$s = Yii::$app->db->createCommand("select @s");
$ret = $s->queryOne();

mysql的存储过程名称是test1,有两个参数:IN reg varchar(50)和OUT s int,reg是php程序传给test1的输入参数,s是存储过程需要返回给php的值。

$cmd = Yii::$app->db->createCommand("call test1(:reg,@s)");
$cmd->bindParam(':reg',$reg,\PDO::PARAM_STR,50);

这里第一句代码是调用test1存储过程,第二句绑定参数。PS:要绑定的参数在调用存储过程时用:variable表示,然后用bindParam绑定就可以把想传递的参数传进test1。@s是输出参数,调用的时候写成@variable这种形式就可以了,以供下面的代码取得@s的值。

$res = $cmd->queryOne();

这句代码执行调用test1存储过程。
比如存储过程里最后有一句:select from tableName;那么$res获得的结果就是这句查询语句的结果。这里有个小的注意的地方,如果存储过程有多句查询语句,比如select from tableName1;select fromtableName2;select from tableName3;那么在mysql命令行里调用test1可以获得这几个查询条件的结果,但是这里用$cmd->queryAll();调用也只能得到tableName1的查询结果,所以最后我还是用了queryOne()这也能满足我饥渴的需要了,哪位战友有yii2的获取多个结果集的方法希望可以分享一下!

$s = Yii::$app->db->createCommand("select @s");
$ret = $s->queryOne();

这段代码就是再次执行mysql命令,获取test1的out参数s的值,查询出来之后赋值给$ret。
这样这段php代码就可以得到一个输出结果集和输出参数了。

下面再贴一段试用这段php代码的mysql存储过程给大家参考:

mysql> DELIMITER //  
mysql> CREATE PROCEDURE test1(IN reg varchar(50),OUT s int)  
    -> BEGIN 
    -> SELECT COUNT(*) INTO s FROM user;  
    -> SELECT * FROM code WHERE regcode=reg;
    -> END 
    -> //  
mysql> DELIMITER ; 

用前面那段php代码调用的话就可以获取输出结果集和输出参数s了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值