PHP7中文手册2018 带注释 最新chm版
$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 from tableName2;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了。
还有一点让我之前蛋疼了一阵子的是,我用的navicat创建的存储过程,流程如下图。。群。。图群,就是好多张图。。
这里需要把varchar的长度也自己填上,不然保存会报错,总是保存不了
由于本人水平相当有限,有什么问题还望大家批评指正,感激不尽!
转载请注明:谷谷点程序 » Yii2调用mysql存储过程获取返回值