0

我一直在研究 AMFPHP + codeigniter + flash,一切正常,但是,当我创建一个存储过程时,问题就开始了。我能够从 AMF 浏览器调用具有多个结果集的存储过程,但是每当从 flash 本身调用该函数时,它都会引发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闪存结束时引发了错误,就好像我注释掉这行它可以工作{就像没有错误但 SP 不执行一样工作}

关于如何解决这个奇怪问题的任何想法。

4

2 回答 2

0

我一直致力于在 codeigniter 的存储过程中执行多个查询,我创建了一个名为 SP.php 的库。这是配置中的代码也更改为 database = 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();    
于 2013-04-09T09:11:00.587 回答
0

尽管 CodeIgniter 使用 mysqli 驱动程序,但在 DB_driver 中没有设置 next_result() 方法。 在这里这里您可以找到更多详细信息。这个想法是:

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