从Codeigniter调用多个存储过程,最后一个结果包含前一个

时间:2017-06-07 07:56:27

标签: codeigniter stored-procedures multiple-resultsets

我在Codeigniter中使用此库从存储过程中检索多个结果集:

class Multi_Results
{
   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=1;
            do
            {
                if ($result = $this->mysqli->store_result()) 
                {
                    while ($row = $result->fetch_assoc())
                    {
                        $this->Data[$i][] = $row;
                    }
                    mysqli_free_result($result);
                }
                $i++; 
            }
            while ($this->mysqli->more_results() && $this->mysqli->next_result());
        }
        return $this->Data;
    }

}

我从控制器调用过程,如

$result_array = $this->multi_results->GetMultiResults("CALL procedure_name($input_1, '$input_2')");

它做它应该做的事情。当我从控制器中一个接一个地调用2个不同的过程并将结果分配给不同的变量时,就会出现问题。 当我var_dump第二个(最后)结果时,它还包含第一个结果的结果集。 我已经检查了database.php中的连接dbdriver(它设置为MSQLI),我试图实现一些建议,如:  CodeIgniter active records' problems calling multiple stored proceduresCalling a stored procedure from CodeIgniter's Active Record class 他们都提出了一个'mysqli_free_result'的解决方案,但是已经在插件库中完成了(正如你在上面的代码片段中看到的那样)。

任何建议都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

$this->data = ''引入函数GetMultiResults()而不是构造函数。  我认为这将解决您的问题。