2014-01-18 4 views
1

я получил модель Newroom:Выполнение 2 MySQL запросов в CodeIgniter выпуске

<?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; 
     } 
    } 
?> 

Если я буду выполнение только один запрос в модели - все работает нормально, но 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 процедуры и выяснить, почему это работает так.

+0

Какой у вас драйвер db? Проверьте '$ db ['default'] ['dbdriver']' в 'application/config/database.php'. Если это mysql, просто измените его на 'mysqli'. –

+0

Изменен для mysqli, не помогая –

+0

Вы отлаживаете свой запрос? $ This-> db-> last_query()? –

ответ

0

Чтобы выполнить несколько процедур на одной странице, вам необходимо изменить $ db ['default'] ['dbdriver'] = 'mysql'; to $ db ['default'] ['dbdriver'] = 'mysqli'; в config/database.php. Затем вам нужно добавить этот кусок кода mysqli_result.php, расположенный в системе \ базы данных \ Drivers \ MySQLi

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; 
    } 

в? будут заменены значениями, если параметры передаются как массив данных

+0

Спасибо! Это помогло отлично. –

Смежные вопросы