2016-07-16 10 views
0

私は2つの選択ドロップダウンボックスを持つフォームを持っていて、PHPを介してすべての値を返す2つのストアドプロシージャを選択に挿入します。しかし、最初の選択ボックスだけが表示され、2番目の選択ボックスは表示されないようです。 私は両方のストアドプロシージャをテストし、正常に動作します。mysqliを使用して2つのストアドプロシージャを呼び出す方法

<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> 

connection.php

<?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!'); 
    } 
?> 
+0

mysqliは、複数のセミコロンの分離されたクエリを一度にサポートします。 – Iceman

+1

@Iceman、私はそれについて知っていますが、私にはこれは論理的にうまくいくはずです。なぜそうでないのか分かりません。手続き的にOOP mysqliに切り替える前にそれは働いた – ygongdev

答えて

2

は、これは私のPDO tutorialからの抜粋ですが、原則的には、任意のAPIに適用されます。

ストアドプロシージャについての一つのことがある任意のプログラマつまずきますすべてのストアドプロシージャは常に1つの余分な結果セットを返します。つまり、実際のデータと空のデータが1つ(または多数)の結果です。つまり、プロシージャを呼び出して別の問合せに進むと、最初に余分な空の結果をクリアする必要があるため、「他のバッファリングされていない問合せがアクティブな間は問合せを実行できません」というエラーが発生します。

だからあなただけの$con->next_result()への呼び出しは、トリックを行う必要がありmysqli_next_result

を使用して、その余分な結果セットに進出しなければなりません。結果セットからすべてのデータをフェッチした後でのみ呼び出さなければならないことに注意してください。

+0

これはトリックでした!私はこのような短期間に自分自身をつまずくことができなかった方法はありませんでした。ありがとうございました! – ygongdev

関連する問題