我在 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();
谢谢!
我在 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;
}
}
更新
根据 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;
}
如果我遗漏了什么或什么不好,请纠正我。
谢谢!