【问题标题】:Execute and fetch two queries in the same page在同一页面中执行并获取两个查询
【发布时间】:2019-12-11 23:08:26
【问题描述】:

当让它们像这样工作时,我在同一个 PHP 文件/页面中有 2 个查询,我得到了结果。

$query1 = mysqli_query($link, "SELECT * FROM tableA");
$restult1= mysqli_fetch_assoc($query1);
$query2=  mysqli_query ($link,"SELECT COUNT(id) AS total FROM tableB");
while ($row = mysqli_fetch_assoc($query2)){
       echo '<option value="'.$row["id"].'">'.$row["first_name"].' '.$row["last_name"].'</option>';
}

但我正在尝试使用 存储过程,所以当我使用这样的存储过程时,我只能得到第一个查询的结果。我已经尝试过使用存储过程对这两个查询进行查询,但它也没有奏效。

$query1 = mysqli_query($link, "CALL GetUsersAll");
$restult1= mysqli_fetch_assoc($query1);
$query2=  mysqli_query ($link,"SELECT COUNT(id) AS total FROM tableB");
while ($row = mysqli_fetch_assoc($query2)){
           echo '<option value="'.$row["id"].'">'.$row["first_name"].' '.$row["last_name"].'</option>';
    }

【问题讨论】:

  • 我相信这会对你有所帮助:multi_query
  • SP返回两个结果集,需要在第二个查询前调用mysqli_next_result$restult1= mysqli_fetch_assoc($query1); mysqli_next_result($link); $query2= mysqli_query ($link,"SELECT COUNT(id) AS total FROM tableB");
  • @A.Cedano 谢谢这对我有用

标签: php mysql stored-procedures


【解决方案1】:

存储过程可以返回两个或多个结果集。

您可以在第二次查询之前拨打mysqli_next_result

$query1 = mysqli_query($link, "CALL GetUsersAll");
$restult1= mysqli_fetch_assoc($query1);
mysqli_next_result($link);
$query2=  mysqli_query ($link,"SELECT COUNT(id) AS total FROM tableB");
//... etc

但是,如果您正在使用来自 mysqly 的 SP,请注意 documentation

处理结果集

存储过程可以返回结果集。从 a 返回的结果集 使用mysqli_query 无法正确获取存储过程。这 mysqli_query 函数结合了语句执行和获取 将第一个结果集放入缓冲结果集中(如果有)。但是,那里 是对用户隐藏的附加存储过程结果集 导致mysqli_query 无法返回用户预期的结果 套

从存储过程返回的结果集是使用 mysqli_real_querymysqli_multi_query。这两个功能都允许 获取语​​句返回的任意数量的结果集,例如 CALL。无法获取存储返回的所有结果集 过程导致错误。

您可以按照Example 3.21 Fetching results from stored procedures 中的说明修改您的代码

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2022-01-22
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多