如何在codeigniter中配置两个数据库。

时间:2017-04-20 09:57:47

标签: php mysql json codeigniter

我正在设置我的两个数据库

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'sql.domain.com',
    'username' => 'u_name',
    'password' => 'pass',
    'database' => 'DB_1',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

$db['User_DB'] = array(
    'dsn'   => '',
    'hostname' => 'sql.domain.com',
    'username' => 'u_name',
    'password' => 'pass',
    'database' => 'DB_2',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

我使用下面的代码访问控制器上面的数据库。

   public function index(){

            $db_anal = $this->load->database('User_DB', TRUE);              
            $p_name = $this->input->post('p_name');


            $user = $this->session->userdata('E_Id');

            $tabs_data['res1'] = $this->db->distinct()->select('p_type')->from('tab_1')->get()->result();       


            //$paper_name = $data;

            $UP_array = array(
                'Status' => 'success',
                'User_id' => $user,                 
            );
            $query1['res1'] = $this->db->select('*')->from('tab_1')->where('p_type',$p_name)->get();        
            $query1['res2'] = $this->db->select('*')->from('tab_2')->where($UP_array)->get();

            $query1['res3'] = $db_anal->select('*')->from('tab_3')->where('User_id',$user)->get();


            echo json_encode($query1);
            return true;                                

}

我通过上面的代码得到空值,任何人都可以告诉我。是第二个数据库的问题。

如何解决这个问题,任何人都可以帮助我。?

我在控制台中低于null也使用ajax从codeigniter获取数据。

  

{" RES1" {" conn_id" {" affected_rows":空," CLIENT_INFO":空," client_version":空," connect_errno":空," connect_error":空,"错误号":空,"错误":空" error_list":空,"场计数":空," host_info":空,"信息":空," INSERT_ID& #34;:空," SERVER_INFO":空," SERVER_VERSION":空," STAT":空," SQLSTATE":空, " PROTOCOL_VERSION":空,"的thread_id":空," WARNING_COUNT":空}" result_id" {" current_field&# 34;:空,"场计数":空,"长度":空," NUM_ROWS":空,"类型":空}, " result_array":[]," result_object":[]," custom_result_object":[]," CURRENT_ROW":0,&#34 ; NUM_ROWS":空," ROW_DATA":空}" RES2" {" conn_id" {" affected_rows":空" CLIENT_INFO":空," client_version":空," connect_errno":空,"康恩ect_error":空,"错误号":空,"错误":空," error_list":空,"场计数":空" host_info":空,"信息":空," INSERT_ID":空," SERVER_INFO":空," SERVER_VERSION& #34;:空," STAT":空," SQLSTATE":空," PROTOCOL_VERSION":空,"的thread_id":空, " WARNING_COUNT":空}" result_id" {" current_field":空,"场计数":空,"长度&# 34;:空," NUM_ROWS":空,"类型":空}" result_array":[]," result_object":[ ]" custom_result_object":[]," CURRENT_ROW":0," NUM_ROWS":空," ROW_DATA":空},&# 34; RES3" {" conn_id" {" affected_rows":空," CLIENT_INFO":空," client_version":空" connect_errno":空," connect_error":空,"错误号":空,"错误":空," error_list& #34;:空,"场计数":空," host_info":空,"信息":空,&#3 4; INSERT_ID":空," SERVER_INFO":空," SERVER_VERSION":空," STAT":空," SQLSTATE" :空," PROTOCOL_VERSION":空,"的thread_id":空," WARNING_COUNT":空}" result_id" {&#34 ; current_field":空,"场计数":空,"长度":空," NUM_ROWS":空,"类型&#34 ;:空}" result_array":[]," result_object":[]," custom_result_object":[]," CURRENT_ROW":0, " NUM_ROWS":空," ROW_DATA":空}}   TEQ:863:6

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

问题是CI代码

  

根据docs,get返回一个(query-)结果对象

如果您想要数据,请尝试以下

$objQuery = $db_anal->select('*')->from('tab_3')->where('User_id',$user)->get();
if ($objQuery->num_rows() > 0)
{
    $query1['res3'] = $objQuery->result();
}

答案 1 :(得分:0)

根据最新的CI Docs使用多个数据库连接,您不应该使用$ this-> db-> query()调用DB,而是使用返回的DB对象为您在exmaple中创建的每个连接:

$db_anal = $this->load->database('User_DB', TRUE);

这个TRUE标志指示CI返回DB对象,并将它存储在$ db_anal中,所以现在你sholud使用这个数据库连接为$ db_anal-> query()...

在代码中更改所有这样的调用:

 $tabs_data['res1'] = $this->db->distinct()->select('p_type')->from('tab_1')->get()->result(); 

到此:

 $tabs_data['res1'] = $db_anal->distinct()->select('p_type')->from('tab_1')->get()->result();