【问题标题】:Multiple db users for multiple db connections多个数据库连接的多个数据库用户
【发布时间】:2012-10-19 08:40:45
【问题描述】:

我在我的 CI 应用上使用了 2 个不同的数据库。

我在 mysql 上创建了 2 个用户,并将 user1 授予 db1 所有权限,然后将 user2 授予 db2 使用 SQLpro 客户端的所有权限。

database.php:

$active_group = 'default';
$active_record = TRUE;   

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '***1';
$db['default']['password'] = '***1';
$db['default']['database'] = 'ci_users';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_unicode_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['keys']['hostname'] = 'localhost';
$db['keys']['username'] = '***2';
$db['keys']['password'] = '***2';
$db['keys']['database'] = 'ci_keys';
$db['keys']['dbdriver'] = 'mysql';
$db['keys']['dbprefix'] = '';
$db['keys']['pconnect'] = TRUE;
$db['keys']['db_debug'] = TRUE;
$db['keys']['cache_on'] = FALSE;
$db['keys']['cachedir'] = '';
$db['keys']['char_set'] = 'utf8';
$db['keys']['dbcollat'] = 'utf8_unicode_ci';
$db['keys']['swap_pre'] = '';
$db['keys']['autoinit'] = TRUE;
$db['keys']['stricton'] = FALSE;

模型:

<?php

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Model_Users extends CI_Model {
    function Model_Users()
    {
        // Call the Model constructor
        parent::__construct();
        $this->load->database('default',true);
    }
etc...


<?php

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Model_Keys extends CI_Model {
    function Model_Keys()
    {
        // Call the Model constructor
        parent::__construct();
        $this->load->database('keys',true);
    }
etc...

因此,当在同一个控制器/方法中使用两个模型时,model_users 效果很好,但 model_keys 返回错误,因为它似乎加载了 model_users db1 而不是加载 db2:

无法修改标头信息 - 标头已由(输出开始于 /Applications/XAMPP/xamppfiles/htdocs/app/application/models/model_keys.php:2) 文件名:core/Common.php
行号:442

发生数据库错误
错误号:1146
表 'ci_users.ci_keys' 不存在 //这应该是 ci_keys.ci_keys

有人知道吗?

我在model_keys中编辑了代码:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Model_Keys extends CI_Model {

    function Model_Keys()
    {
        // Call the Model constructor
        parent::__construct();
        $this->db_keys = $this->load->database('keys',true);
    } 

现在 db 可以工作,但我收到模型上的会话错误:

消息:无法修改标头信息 - 标头已发送(输出开始于 /Applications/XAMPP/xamppfiles/htdocs/site/application/models/model_keys.php:2)

在控制器中我正在这样做:

$this->load->model('model_users');
$this->model_users->insert(bla bla);

$this->load->model('model_keys');
$this->model_keys->insert(bla bla);

$this->session->set_userdata(array(bl bla);

redirect(some url);

【问题讨论】:

    标签: php mysql codeigniter database-connection


    【解决方案1】:

    下面是问题

    $this->load->database('keys',true);
    

    如果你传递第二个参数 TRUE,那么它将返回数据库对象并且它不会与 ActiveRecord 一起使用。

    这里是例子

    $DB1 = $this->load->database('group_one', TRUE);
    
    //Then you can't below function
    $this->db->query();
    
    You will instead use:
    
    $DB1->query();
    

    【讨论】:

    • 谢谢,我编辑了问题,因为我收到会话错误,这很奇怪
    • 错误表示在重定向之前在 model_keys.php 中开始标头输出。尝试将 ob_start() 放在重定向之前(一些 url);
    • 试过了,但没有产生任何结果,也没有解决任何问题:P
    • model_keys.php 的第 2 行是什么?
    • 是的..因为某处输出已经开始发送到浏览器。
    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2019-07-10
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多