我在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 procedures和Calling a stored procedure from CodeIgniter's Active Record class 他们都提出了一个'mysqli_free_result'的解决方案,但是已经在插件库中完成了(正如你在上面的代码片段中看到的那样)。
任何建议都将受到高度赞赏!
答案 0 :(得分:1)
将$this->data = ''
引入函数GetMultiResults()而不是构造函数。
我认为这将解决您的问题。