1

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はエラーを返します。これは、db2をロードする代わりにmodel_usersdb1をロードするように見えるためです。

ヘッダー情報を変更できません-ヘッダーはすでに送信されています(出力は/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);
4

1 に答える 1

3

下の行は問題です

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

2番目の引数TRUEを渡すと、データベースオブジェクトが返され、ActiveRecordでは機能しません。

これが例です

$DB1 = $this->load->database('group_one', TRUE);

//Then you can't below function
$this->db->query();

You will instead use:

$DB1->query();
于 2012-10-19T08:46:32.640 に答える