Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP从存储过程中检索多个结果集_Php_Mysql_Pdo - Fatal编程技术网

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

使用PHP从存储过程中检索多个结果集,php,mysql,pdo,Php,Mysql,Pdo,我创建了一个包含4条语句的存储过程 DELIMITER $$ CREATE PROCEDURE returnFunction() BEGIN SELECT * FROM tb_1 as 1; SELECT * FROM tb_2 as 2; SELECT *

我创建了一个包含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


我该怎么做呢?

您可以像下面这样使用union,输出v1、v2、v3、v4,然后将它们分配给您的变量

SELECT MAX(v1) as v1,MAX(v2) as v2,MAX(v3) as v3,MAX(v4) as v4
FROM
(       
SELECT 1.x AS v1,NULL  AS v2,NULL AS v3, NULL AS v4 
FROM tb_1 AS 1
UNION ALL
SELECT NULL AS v2,2.x  AS v2,NULL AS v3, NULL AS v4
FROM tb_2 AS 2
UNION ALL    
SELECT NULL AS v2,NULL AS v2,3.x AS v3, NULL AS v4
FROM tb_3 AS 3
UNION ALL    
SELECT NULL AS v2,NULL AS v2,NULL AS v3, 4.x AS v4
FROM tb_4 AS 4
) A
您可以使用来动态生成变量名:

$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
块之外。

这是否回答了您的问题?