存储过程返回多个结果集 [duplicate]

Stored procedure returns multiple resultset [duplicate]

提问人:Jeff 提问时间:10/5/2023 更新时间:10/5/2023 访问量:34

问:

我有一个返回 3 个结果集的存储过程。
当我使用 MySQL 工作台测试我的程序时,它给了我 3 个结果。
但是,当我使用 php 调用该过程时,我只得到 3 个结果中的第一个。请参阅下面的代码

$sql = "call myproc();";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)){
    echo '<pre>'; print_r($row); echo '</pre>';
}

我已经研究了mysqli_next_result功能,但无法让它给我其他 2 个结果。
感谢您的帮助。

php mysql 存储过程

评论

0赞 Bill Karwin 10/5/2023
@ADyson,所有存储过程都可能返回多个结果集。某些过程甚至可能根据过程正文中的条件返回其他结果集。因此,客户端必须像使用 mysqli_multi_query() 一样处理调用语句。
0赞 ADyson 10/5/2023
@BillKarwin所以你的意思是next_result可以在不使用multi_query的情况下工作?
0赞 Bill Karwin 10/5/2023
@ADyson,是的,没错。请参阅我这个旧答案中的例子: stackoverflow.com/a/1304381/20860 这个答案是关于 Zend Framework 适配器的,但同样适用于 PDO 和 Mysqli,即使不使用框架也是如此。
1赞 ADyson 10/5/2023
@BillKarwin谢谢,这很有用。无论哪种方式,我认为该帖子仍然是至少几个旧帖子的副本
1赞 Bill Karwin 10/5/2023
@ADyson,Stack Overflow 上几乎所有的问题都已经得到解答!哈哈

答:

-1赞 Jeff 10/5/2023 #1

这是最终解决我问题的代码。

$sql = "call myproc();";
mysqli_multi_query($con, $sql);
do {
    if ($result = mysqli_store_result($con)) {
        while ($row = mysqli_fetch_row($result)) {
            echo '<pre>'; print_r($row); echo '</pre>';
        }
        if (mysqli_more_results($con)) {
            printf("-----------------\n");
        }
    }
} while (mysqli_more_results($con) && mysqli_next_result($con));

感谢大家对此的帮助。