【问题标题】:Switching databases in code igniter在 codeigniter 中切换数据库
【发布时间】:2011-07-11 17:45:18
【问题描述】:

我有两个需要连接的数据库,可以在我编写的控制器和库中完成。出于某种奇怪的原因(我假设我只是在这里遗漏了一些简单的东西)我突然无法让它在模型中工作。我已经阅读了 CI 用户指南中的数据库类。

我尝试在加载 pew ($this->pew =& $this->load->database('pew', TRUE)) 时引用 $pew 无济于事。

有什么想法和建议吗?谢谢!

错误

PHP Fatal error:  Call to a member function query() on a non-object in
/Sites/CI/nyan/application/models/pewpewmodel.php on line 15

第 15 行

$this->pew->query('SELECT * FROM ExtractEvent'); //simplified for testing

database.php

$active_group = 'nyan';
$active_record = TRUE;

$db['nyan']['hostname'] = 'catcatcat';
$db['nyan']['username'] = 'mew';
$db['nyan']['password'] = 'meow';
$db['nyan']['database'] = 'meow';
$db['nyan']['dbdriver'] = 'mysql';

$db['pew']['hostname'] = 'jujubees';
$db['pew']['username'] = 'qwop';
$db['pew']['password'] = 'qwop';
$db['pew']['database'] = 'nom';
$db['pew']['dbdriver'] = 'mssql';

模型 pewpewmodel.php

private $pew; 

function __construct()
{
    parent::__construct();
    $this->pew = $this->load->database('pew', TRUE);
}

function get_forms_by_date($id = NULL, $Year = NULL, $Month = NULL, $Day = NULL)
{
    $this->pew->query('SELECT * FROM ExtractEvent'); //simplified for testing
}

控制器 nomnom.php

public function index()
{
    $this->load->model('pewmodel');
    $data['Forms'] = $this->pewmodel->get_forms_by_date($this->session->userdata('Username'), date('Y'), date('n'), date('j'));
    $this->load->view('common/header', $data['Forms']);
    $this->load->view('home/index');
    $this->load->view('common/footer');
}

查看 index.php

<pre>
<?php print_r($Forms); ?>
</pre>

【问题讨论】:

    标签: php database codeigniter switching


    【解决方案1】:

    这对我有用。

    [从模型构造函数中]

            $db['hostname'] = 'localhost';
            $db['username'] = 'root';
            $db['password'] = '';
            $db['database'] = 'my_database';
            $db['dbdriver'] = 'mysql';
            $db['dbprefix'] = '';
            $db['pconnect'] = TRUE;
            $db['db_debug'] = TRUE;
            $db['cache_on'] = FALSE;
            $db['cachedir'] = '';
            $db['char_set'] = 'latin1';
            $db['dbcollat'] = 'latin1_bin';
            $db['swap_pre'] = '';
            $db['autoinit'] = TRUE;
            $db['stricton'] = FALSE;
    
            $this->load->database($db, FALSE, TRUE);
            // False=don't return db object
            // True =use as active record, so it replaces default $this->db
    

    希望这有助于编码人员像我一样通过 Google 进行搜索。

    【讨论】:

      【解决方案2】:
      $this->pew = $this->load->database('pew', TRUE);
      

      您加载了一个在您的数据库配置中不存在的数据库。

      【讨论】:

      • 我在粘贴问题时使用了上面两个不同的名称,哎呀,已修复。
      • 什么是 var_dump($this->pew);说什么?
      • 出于某种原因,CI 不返回数据库对象。也许它无法连接或配置文件中不存在该组(可能是错字)。没有错误信息?日志中没有任何内容?
      • php_error.log - [11-Jul-2011 10:29:54] PHP 致命错误:在 /Sites/CI/nyan/application 中的非对象上调用成员函数 query() /models/pewpewmodel.php 在第 15 行如果我将数据库组的名称从 pew 切换到 nyan(它默认加载)连接返回 true 并且可以连接到数据库没问题
      • 刚刚尝试使用 DSN 样式 $dsn = 'mssql://qwop:qwop@jujubees/nom'; $this->pew = $this->load->database($dsn); var_dump 结果:构造函数和方法中的 bool(false)。连接字符串确实有效,只是不是来自 CI。我一直在两个单独的项目中编写相同的代码,我将在另一个项目中检查这些结果,看看它是否在那里工作,然后编辑这篇文章。
      【解决方案3】:

      当我通过 TRUE 来连接时,我收到了 500 错误,如下所示。我假设(是的,我知道)我只是在连接时遇到了同样的问题。说实话,从一开始就是 ID10T 错误。我缺少本地机器上的 mssql.so 库和另一个我正在测试的库。

      $this->pew =& $this->load->database('pew', TRUE)
      

      对于浪费时间的绅士们,我深表歉意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        相关资源
        最近更新 更多