在CodeIgniter问题中执行2个mysql查询

时间:2014-01-18 17:45:04

标签: php mysql sql codeigniter

我有一个Newroom模型:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
    class Newroom_model extends CI_Model {

        function __construct()
        {
            parent::__construct();
        }

        function get()
        {
            $data=array();

            //First
            $query=$this->db->query("call GetHomeTypes()");
            $res = $query->result_array();
            for($i=0;$i<count($res);$i++)
            {
                $data['home_Types'][$i]['Type_ID']=$res[$i]['TypeID'];
                $data['home_Types'][$i]['Type_Name']=$res[$i]['TypeName'];
            }
            //Second
            $query2=$this->db->query("call GetRoomTypes()");
            $res1 = $query2->result_array();
            for($i=0;$i<count($res1);$i++)
            {
                $data['room_Types'][$i]['Type_ID']=$res1[$i]['TypeID'];
                $data['room_Types'][$i]['Type_Name']=$res1[$i]['TypeName'];
            }

            // print_r($data);
            return $data; 
        } 
    }
?>

如果我在模型中只执行1个查询 - 一切正常,但2不返回任何内容。 无法弄清楚这里有什么问题。

UPD 我发现如果我在第一部分使用简单查询(不是程序),一切都运行良好

$query=$this->db->query("SELECT TypeID,TypeName
 FROM home_Types;");
    $res = $query->result_array();
     for($i=0;$i<count($res);$i++) {
     $data['home_Types'][$i]['Type_ID']=$res[$i]['TypeID'];
     $data['home_Types'][$i]['Type_Name']=$res[$i]['TypeName'];

但我需要使用2个程序并找出它的工作原理。

2 个答案:

答案 0 :(得分:0)

使用$this->db->call_function('nameOfProcedure');了解更多信息,请访问此页面。 http://ellislab.com/codeigniter/user-guide/database/call_function.html

答案 1 :(得分:0)

要在单个页面中运行多个程序,首先需要更改$ db ['default'] ['dbdriver'] ='mysql';到$ db ['default'] ['dbdriver'] ='mysqli';在config / database.php中。然后你需要将这段代码添加到位于system \ database \ drivers \ mysqli中的mysqli_result.php

 function next_result(){
    if (is_object($this->conn_id)){
      return mysqli_next_result($this->conn_id);
    }
  }

然后当你调用函数来执行这样的过程调用时

public function SP1($data=array()){
        $stored_procedure= " CALL GetHomeTypes(?,?) ";
        $query=$this->db->query($stored_procedure,$data);
        $result=array();
        foreach ($query->result() as $rows){
            $result[]=$rows;
        }
        $query->next_result();
        $query->free_result();
        return $result;
    }

?如果参数作为数据数组传递,则将被值替换