使用 PHP 从存储过程中检索多个结果集

我创建了一个包含 4 条语句的存储过程


DELIMITER $$


CREATE PROCEDURE returnFunction()

BEGIN

        SELECT

            * 

        FROM

            tb_1 as 1;


        SELECT

            *

        FROM

            tb_2 as 2;

            

        SELECT

            *

        FROM

            tb_3 as 3;

            

        SELECT

            *

        FROM

            tb_4 as 4;

END;

并像这样调用这个 sp


$query = "CALL returnFunction()";

$p_sql = connection::conn()->prepare($query);

$p_sql->execute(); 

do {

     $rows = $p_sql->fetchAll(PDO::FETCH_NUM);

     if ($rows) 

     {

          print_r($rows);

     }

   } while ($p_sql->nextRowset());

这将返回所有语句的结果。


我需要将结果放入第一个语句并将其放入变量 $v1 第二个语句变量 $v2 第三个语句变量 $v3 第四个语句变量 $v4


我怎样才能做到这一点?


30秒到达战场
浏览 125回答 2
2回答

喵喵时光机

您可以使用变量变量来动态生成变量名称:$query = "CALL returnFunction()";$p_sql = connection::conn()->prepare($query);$p_sql->execute(); $i = 1;do {     $rows = $p_sql->fetchAll(PDO::FETCH_NUM);     if ($rows)      {          print_r($rows);          ${"v$i"} = $rows;     }     $i++;} while ($p_sql->nextRowset());这会将每个非空结果集放入一个变量等中$v1。$v2但是您应该考虑只使用数组:$query = "CALL returnFunction()";$p_sql = connection::conn()->prepare($query);$p_sql->execute(); $v = array();do {     $rows = $p_sql->fetchAll(PDO::FETCH_NUM);     if ($rows)      {          print_r($rows);          $v[] = $rows;     }} while ($p_sql->nextRowset());请注意,如果您也想存储空结果集,请将赋值移到块之外if。

忽然笑

您可以使用像下面这样的 union 并输出 v1,v2,v3,v4,然后将它们分配给您的变量SELECT MAX(v1) as v1,MAX(v2) as v2,MAX(v3) as v3,MAX(v4) as v4FROM(       SELECT 1.x AS v1,NULL  AS v2,NULL AS v3, NULL AS v4 FROM tb_1 AS 1UNION ALLSELECT NULL AS v2,2.x  AS v2,NULL AS v3, NULL AS v4FROM tb_2 AS 2UNION ALL    SELECT NULL AS v2,NULL AS v2,3.x AS v3, NULL AS v4FROM tb_3 AS 3UNION ALL    SELECT NULL AS v2,NULL AS v2,NULL AS v3, 4.x AS v4FROM tb_4 AS 4) A
打开App,查看更多内容
随时随地看视频慕课网APP