PHP如何得到存储过程的返回值

时间:2022-05-28 21:15:36
有如下存储过程

CREATE PROCEDURE user_degree(p_username varchar(21) CHARACTER SET utf8,out degree int)
Userdegree:
BEGIN
          DECLARE td int ;
          SELECT accepts INTO td FROM exercise_user WHERE  
          username= p_username;
          IF (td>800) THEN SET degree=1;
          ELSEIF (td>600) THEN SET degree=2;
          ELSEIF (td>400) THEN SET degree=3;
          ELSEIF (td>200) THEN SET degree=4;
          ELSE  SET degree=5;
          END IF;
END


现在我要在php中得到degree的值 ,在CMD里面我知道可以这样

mysql> call user_degree('test',@test);
Query OK, 0 rows affected (0.14 sec)

mysql> select @test;
+-------+
| @test |
+-------+
|     4 |
+-------+
1 row in set (0.00 sec)


但我不知道在PHP中如何实现,希望哪位能给个范例,谢谢!

5 个解决方案

#1


一样的方法,先执行 mysql_query(call user_degree('test',@test))
然后再执行 mysql_query(select @test) 得到返回变量值。

#2


引用 1 楼 acmain_chm 的回复:
一样的方法,先执行 mysql_query(call user_degree('test',@test))
然后再执行 mysql_query(select @test) 得到返回变量值。


我按照原来的方法返回的是 Resource id #7  
代码如下:

function userdegree1($username)
{
global $db;
$query1 = "call user_degree($username,@test);";
$db->query($query);
$query2 = "select @test;";
$degree = $db->query($query2);
echo $degree;
return $degree;
}

#3


你需要查一下你的PHP手册,查看一下是如何中获取 select fld1,fld2from ..中的字段信息。$degree = $db->query($query2); 你这样$degree 是哪个字段呢?

建议到PHP去咨询一下。

#4


$degree是一个行集。肯定不行。
应该$degree[0]或什么之类的。

#5


引用 4 楼 iihero 的回复:
$degree是一个行集。肯定不行。
应该$degree[0]或什么之类的。

谢谢各位的回答~~

#1


一样的方法,先执行 mysql_query(call user_degree('test',@test))
然后再执行 mysql_query(select @test) 得到返回变量值。

#2


引用 1 楼 acmain_chm 的回复:
一样的方法,先执行 mysql_query(call user_degree('test',@test))
然后再执行 mysql_query(select @test) 得到返回变量值。


我按照原来的方法返回的是 Resource id #7  
代码如下:

function userdegree1($username)
{
global $db;
$query1 = "call user_degree($username,@test);";
$db->query($query);
$query2 = "select @test;";
$degree = $db->query($query2);
echo $degree;
return $degree;
}

#3


你需要查一下你的PHP手册,查看一下是如何中获取 select fld1,fld2from ..中的字段信息。$degree = $db->query($query2); 你这样$degree 是哪个字段呢?

建议到PHP去咨询一下。

#4


$degree是一个行集。肯定不行。
应该$degree[0]或什么之类的。

#5


引用 4 楼 iihero 的回复:
$degree是一个行集。肯定不行。
应该$degree[0]或什么之类的。

谢谢各位的回答~~