Php 如何使用mysqli调用2个存储过程

Php 如何使用mysqli调用2个存储过程,php,html,mysqli,Php,Html,Mysqli,基本上,我有一个带有2个选择下拉框的表单,我想用2个通过php返回所有值的存储过程填充选择。但是,似乎只有第一个选择框被填充,而第二个没有。 我已经测试了这两个存储过程,它们工作正常 <div class="form-group row"> <label class="col-sm-2 form-control-label">Name</label> <div class="col-sm-10"> <select class=

基本上,我有一个带有2个选择下拉框的表单,我想用2个通过php返回所有值的存储过程填充选择。但是,似乎只有第一个选择框被填充,而第二个没有。 我已经测试了这两个存储过程,它们工作正常

<div class="form-group row">
  <label class="col-sm-2 form-control-label">Name</label>
  <div class="col-sm-10">
    <select class="form-control" name="pokemonName" style="width:30%;">
      <?php          
        require_once '../database/connection.php';
        $sqlNames = "CALL sp_selectAllPokemonName";
        $names = $con->query($sqlNames);
        while ($name = $names->fetch_assoc()){
          echo "<option value= '".$name['pokemonName']."'>".$name['pokemonName']."</option>";
        }
      //  $names->close();
      //  $con->close();
      ?>
    </select>
  </div>
</div>

<div class="form-group row">
  <label class="col-sm-2 form-control-label">Hour</label>
  <div class="col-sm-10">
    <select class="form-control" name="hour" style="width:30%;">
      <?php 
        // query doesn't work here
        require_once '../database/connection.php'; 
        $sqlHours = "CALL sp_selectAllHour";
        $hours = $con->query($sqlHours);
        while ($hour = $hours->fetch_assoc()){
          echo "<option value= '".$hour['Id']."'>".$hour['Id']."</option>";
        }
      ?>
    </select>
  </div>
</div>

名称
时辰

这是my的摘录,但该原则适用于任何API:

关于存储过程,任何程序员一开始都会遇到一件事:每个存储过程都会返回一个额外的结果集:一个(或多个)带有实际数据的结果集,而一个是空的。这意味着,如果您尝试调用一个过程,然后继续执行另一个查询,则会出现“在其他未缓冲查询处于活动状态时无法执行查询”错误,因为您必须首先清除该额外的空结果

因此,您必须使用


只要调用
$con->next_result()
就可以了。请注意,只有在从结果集中获取所有数据后才能调用它。

这是my的摘录,但该原则适用于任何API:

关于存储过程,任何程序员一开始都会遇到一件事:每个存储过程都会返回一个额外的结果集:一个(或多个)带有实际数据的结果集,而一个是空的。这意味着,如果您尝试调用一个过程,然后继续执行另一个查询,则会出现“在其他未缓冲查询处于活动状态时无法执行查询”错误,因为您必须首先清除该额外的空结果

因此,您必须使用


只要调用
$con->next_result()
就可以了。请注意,只有在从结果集中获取所有数据后才能调用它。

mysqli
支持一次执行多个分号分隔的查询。@Iceman,我知道这一点,但对我来说,这在逻辑上应该是可行的。我不明白为什么不是。在我从程序性切换到OOP mysqli
mysqli
之前,它工作正常。mysqli
一次支持多个分号分隔的查询。@Iceman,我知道这一点,但对我来说,这在逻辑上应该是可行的。我不明白为什么不是。在我从程序性切换到OOP之前,它起作用了。mysqliThis做了这个把戏!在这么短的时间内,我自己也不可能不发现这一点。非常感谢。这就成功了!在这么短的时间内,我自己也不可能不发现这一点。非常感谢。
<?php
    require 'credentials.php';
    include '../ChromePhp.php';
    // Create connection
    //$con = mysqli_connect($servername, $username, $password, $dbname); // Procedural
    $con = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($con->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
        ChromePhp::warn('something went wrong!');
    }
?>