[英]How to fetch multiple results returned from stored procedure - Codeigniter
[英]CodeIgniter multiple results from stored procedure
我在MySQL上有一個存儲過程,例如:
CREATE PROCEDURE get_multiple_results()
BEGIN
SELECT 'A' AS A;
SELECT 'B' AS B;
SELECT 'C' AS C;
END
那么,我如何使用CodeIgniter的查詢方法獲取數據?
$this->db->query('CALL get_multiple_results()')->result_array();
謝謝!
只需調用下面編寫的方法並獲取查詢結果的數組(列表),例如$ resultSet = $ this-> GetMultipleQuery(“CALL my_proc('$ input')”);
查詢字符串也可以是多個選擇查詢的串聯。
/**
* To get result(s) of queries that returns multiple result sets...
*
* @author Pankaj Garg <garg.pankaj15@gmail.com>
*
* @param string $queryString
*
* @return bool|array List of result arrays
*/
public function GetMultipleQueryResult($queryString)
{
if (empty($queryString)) {
return false;
}
$index = 0;
$ResultSet = array();
/* execute multi query */
if (mysqli_multi_query($this->db->conn_id, $queryString)) {
do {
if (false != $result = mysqli_store_result($this->db->conn_id)) {
$rowID = 0;
while ($row = $result->fetch_assoc()) {
$ResultSet[$index][$rowID] = $row;
$rowID++;
}
}
$index++;
} while (mysqli_next_result($this->db->conn_id));
}
return $ResultSet;
}
我希望你使用sqlsrv驅動程序。
在這種情況下包括下面提供的庫。
$this->load->library('sqldb');
並運行查詢
$this->sqldb->query($querystring);
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter sqldb Class
*
* This library will help get multiple resultsets from SQL stored procedure
* @author Saamit Raut
*/
class Sqldb {
function __construct() {
//$CI->load->database();
//$this->load->library('database');
$this->CI =& get_instance();
$this->CI->load->database();
}
public function query($querystring){
$query=sqlsrv_query($this->CI->db->conn_id,$querystring);//exit;
$resultsets=array();
do{
$array=array();
while( $row = sqlsrv_fetch_array( $query, SQLSRV_FETCH_ASSOC )) {
$array[]=$row;
}
$resultsets[]=$array;
}while(sqlsrv_next_result($query));
return $resultsets;
}
}
UPDATE
根據PHP手冊http://php.net/manual/en/mysqli.multi-query.php解決了我的問題
並且,修改了下一個文件:
在文件末尾添加函數multi_results。
public function multi_results() { return array(); }
在simple_query()函數之后添加函數multi_query()。
function multi_query($sql, $binds = FALSE)
{
if ( ! $this->conn_id)
{
$this->initialize();
}
$sql = $this->compile_binds($sql, $binds);
return $this->_execute_multi_query($sql);
}
在_execute()函數之后添加函數_execute_multi_query()。
/**
* Execute multi query
*
* @access private called by the base class
* @param string an SQL query
* @return resource
*/
function _execute_multi_query($sql)
{
$sql = $this->_prep_query($sql);
$result_sets = array();
$k = 0;
mysqli_multi_query($this->conn_id, $sql);
do
{
$result = mysqli_store_result($this->conn_id);
if($result)
{
$l = 0;
while($row = mysqli_fetch_assoc($result))
{
$result_sets[$k][$l] = $row;
$l++;
}
$k++;
mysqli_free_result($result);
}
}
while(mysqli_next_result($this->conn_id));
return $result_sets;
}
如果我遺漏了某些東西或者某些東西是壞的,請糾正我。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.