簡體   English   中英

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解決了我的問題

並且,修改了下一個文件:

  • 系統/數據庫/驅動器/ DB_result.PHP

在文件末尾添加函數multi_results。

public function multi_results() { return array(); }
  • 系統/數據庫/驅動器/ DB_driver.php

在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);
}
  • 系統/ DATABSE /司機/ mysqli_driver.php

在_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM