我在我的 CI 应用程序上使用了 2 个不同的数据库。
我在 mysql 上创建了 2 个用户,并授予 user1 到 db1 所有权限,然后授予 user2 到 db2 使用 SQLpro 客户端的所有权限。
数据库.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);