0

私は AMFPHP + codeigniter + flash に取り組んできましたが、すべて正常に動作していましたが、ストアド プロシージャを作成したときに問題が発生しました。AMF ブラウザーから複数の結果セットを使用してストアド プロシージャを呼び出すことができましたが、関数がフラッシュ自体から呼び出されるたびに、Bad Version error.

以下は、使用している複数の結果セットをトラバースするライブラリ {CI フォーラムからの} です。

class Mydb
{
   private $CI, $Data, $mysqli, $ResultSet;

   /**
   * The constructor
   */

   function __construct()
   {
     $this->CI =& get_instance();
     $this->Data = '';
     $this->ResultSet = array();
     $this->mysqli = $this->CI->db->conn_id;
   }

    public function GetMultiResults($SqlCommand)
    {
    /* execute multi query */
    if (mysqli_multi_query($this->mysqli, $SqlCommand)) {
        $i=0;
        do
        {

             if ($result = $this->mysqli->store_result()) 
             {
                while ($row = $result->fetch_assoc())
                {
                    $this->Data[$i][] = $row;
                }
                mysqli_free_result($result);
             }
            $i++; 
        }
        while ($this->mysqli->next_result());
    }
    return $this->Data;

   }   
}

そしてそれを次のように呼び出します:

$this->load->library('mydb');
$this->mydb->GetMultiResults("CALL test()");

この行をコメントアウトしたかのように、ライブラリの読み込み行がフラッシュ終了時にエラーを発生させることに気付きましたBad Version{works like no error is er but SP does not execute}

この奇妙な問題を修正する方法についてのアイデア。

4

2 に答える 2

0

CodeIgniter は mysqli ドライバーを使用しますが、next_result() メソッドは DB_driver に設定されていません。 詳細については、こちらこちらをご覧ください。アイデアは次のとおりです。

  1. system/database/DB_driver.phpでnext_result()メソッドを定義します。

    function next_result() { if (is_object($this->conn_id)) { return mysqli_next_result($this->conn_id); } }

(CI システム コアのアップグレードのために、これをメモの山に押し上げてください)

  1. mysqliドライブ (application/config/database.php) を使用していることを確認してください。
  2. モデルでストアド プロシージャを呼び出した後、BETWEEN で結果を取得するたびに使用$query_or_somethig-else->next_result();(および$query_or_somethig-else->free_result();最終的に使用)
于 2016-08-21T11:09:15.043 に答える