2012-06-26 95 views
0

我一直在研究AMFPHP + codeigniter + flash,並且一切正常,但是當我創建存儲過程時,問題就開始了。我能夠使用AMF瀏覽器​​中的多個結果集調用存儲過程,但是無論何時從Flash本身調用該函數,都會引發Bad Version error在Codeigniter中有多個結果集的存儲過程

下面是庫{從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錯誤在閃光結束,好像我註釋掉這條線它的工作{像沒有錯誤是工作,但SP不執行}

任何想法如何f ix這個奇怪的問題。

+0

什麼版本的CodeIgniter?我正在使用3.1.4 6/2017 –

回答

0

我一直在codeigniter中的存儲過程中的多個查詢執行工作 我創建了一個名爲SP.php的庫。下面是代碼中的配置也改變到數據庫= 的mysqli

if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

    class CI_SP { 
     private $CI; 

     function __construct() { 
      $this->CI = & get_instance(); 
     } 

     public function GetResults($SqlCommand) { 
      $k = 0; 
      $arr_results_sets = array(); 
      /* execute multi query */ 
      if (mysqli_multi_query($this->CI->db->conn_id, $SqlCommand)) { 
       do { 
        $result = mysqli_store_result($this->CI->db->conn_id); 
        if ($result) { 
         $l = 0; 
         while ($row = $result->fetch_assoc()) { 
          $arr_results_sets[$k][$l] = $row;       
          $l++; 
         } 
        } 
        $k++; 
       } while (mysqli_next_result($this->CI->db->conn_id)); 

       return $arr_results_sets; 
      } 
     } 

} 

和型號代碼是

$result = $this->sp->GetResults("call function(parameters); 
    $result1 = $this->sp->GetResults("call function(parameters)); 

    print_r($result);   
    print_r($result1);   
    exit; 
    return $query->result_array();  
0
雖然

CodeIgniter使用mysqli的驅動程序中的next_result()方法未在DB_driver設置。 Here and here你可以找到更多的細節。我們的想法是:

  1. 定義next_result()在系統/數據庫方法/ DB_driver.php

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

(一定要推這件事到你的筆記本爲CI系統核心升級)

  • 確保您使用的mysqli驅動器(應用程序/配置/ database.php中)
  • 在模型中調用存儲過程後之間的每個取的效果,請使用$query_or_somethig-else->next_result();(和在最後使用$query_or_somethig-else->free_result();
  • 相關問題