【问题标题】:How to configure two database in codeigniter.?如何在codeigniter中配置两个数据库。?
【发布时间】:2017-09-16 21:25:15
【问题描述】:

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

$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":null,"client_info":null,"client_version":null,"connect_errno":null,"connect_error":null,"errno":null, "error":null,"error_list":null,"field_count":null,"host_info":null,"info":null,"insert_id":null,"server_info":null,"server_version":null,"stat ":null,"sqlstate":null,"protocol_version":null,"thread_id":null,"warning_count":null},"result_id":{"current_field":null,"field_count":null,"lengths": null,"num_rows":null,"type":null},"result_array":[],"result_object":[],"custom_result_object":[],"current_row":0,"num_rows":null,"row_data ":null},"res2":{"conn_id":{"affected_rows":null,"client_info":null,"client_version":null,"connect_errno":null,"connect_error":null,"errno":null ,"error":null,"error_list":null,"field_count":null,"host_info":null,"info":null,"insert_id":null,"server_info":null,"server_version":null," stat":null,"sqlstate":null,"protocol_version":null,"thread_id":null,"warning_count":null},"result_id":{"current_field":null,"field_count":null,"lengt hs":null,"num_rows":null,"type":null},"result_array":[],"result_object":[],"custom_result_object":[],"current_row":0,"num_rows":null ,"row_data":null},"res3":{"conn_id":{"affected_rows":null,"client_info":null,"client_version":null,"connect_errno":null,"connect_error":null,"errno ":null,"error":null,"error_list":null,"field_count":null,"host_info":null,"info":null,"insert_id":null,"server_info":null,"server_version": null,"stat":null,"sqlstate":null,"protocol_version":null,"thread_id":null,"warning_count":null},"result_id":{"current_field":null,"field_count":null, "lengths":null,"num_rows":null,"type":null},"result_array":[],"result_object":[],"custom_result_object":[],"current_row":0,"num_rows":空,“行数据”:空}} teq:863:6

任何人都可以帮助我。?

【问题讨论】:

    标签: php mysql json codeigniter


    【解决方案1】:

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

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

    此 TRUE 标志指示 CI 返回 DB 对象,并且您将其存储在 $db_anal 中,因此现在您应该将此 DB 连接用作 $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(); 
    

    【讨论】:

    • 抱歉,tab_1 在默认数据库中,而不是在第二个数据库中。
    【解决方案2】:

    问题在于 CI 代码

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

    如果您想从中取出数据,请尝试以下操作

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

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 2012-06-08
      • 2013-02-27
      • 2019-11-10
      • 2016-04-14
      • 2015-11-26
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多