Codeigniter,调用多个数据库

Posted

技术标签:

【中文标题】Codeigniter,调用多个数据库【英文标题】:Codeigniter, call multiple DB's 【发布时间】:2016-04-19 22:05:31 【问题描述】:

我对 codeigniter 很陌生,但正在处理有关多个 db 的问题。数据库位于同一主机上。

我已更改 database.php 文件以包含一个额外的组,除了“默认”新组称为“社交”

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

$db['default']['hostname'] = 'xxxx';
$db['default']['username'] = 'xxx';
$db['default']['password'] = 'xxxx';
$db['default']['database'] = 'mysql';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['social']['hostname'] = 'xxx';
$db['social']['username'] = 'xxx';
$db['social']['password'] = 'xxx';
$db['social']['database'] = 'social';
$db['social']['dbdriver'] = 'mysqli';
$db['social']['dbprefix'] = '';
$db['social']['pconnect'] = TRUE;
$db['social']['db_debug'] = FALSE;
$db['social']['cache_on'] = FALSE;
$db['social']['cachedir'] = '';
$db['social']['char_set'] = 'utf8';
$db['social']['dbcollat'] = 'utf8_general_ci';
$db['social']['swap_pre'] = '';
$db['social']['autoinit'] = TRUE;
$db['social']['stricton'] = FALSE;

现在在我的代码中我调用 dbs

public function __construct()

    $dbgroup = !file_exists(".git") ? "default" : "development";
    $this->_time = microtime(true);
    $this->_db =& DB($dbgroup);

    $dbgroup = "social";
    $this->_time = microtime(true);
    $this->_dbs =& DB($dbgroup);

我做错了什么,为什么我不能使用 _dbs 从第二个数据库中获取数据?请记住......在这里完全编码新手!这不是我的日常工作:)

更新! 尝试按照 ***.com/a/8269596 中的描述在此函数中调用 db,但我仍然无法使其正常工作。

public function getUsers($userid = NULL)

    if (empty($userid) ) 
                $rs = $this->load->database('social', TRUE);
        ->select("id, username")
        ->from("user")
        ->get();
        $userid = $rs->result();
    return $userid;
    
    elseif (isset($userid)) 
                $rs = $this->load->database('social', TRUE);
        ->select("id, username")
        ->from("user")
        ->where('id', $userid)
        ->get();
        $userid = $rs->result();
    return $userid;
    

【问题讨论】:

您使用的是哪个 CodeIgniter 版本? 我建议查看***.com/a/8269596,特别是这一行$otherdb = $this->load->database('otherdb', TRUE); 试过了,但无法正常工作if (empty($userid) ) $rs = $this->load->database('social', TRUE); ->select("id, username") ->from("pricecloud_user") ->get(); $userid = $rs->result(); return $userid; elseif (isset($userid)) $rs = $this->load->database('social', TRUE); ->select("id, username") ->from("user") ->where('id', $userid) ->get(); $userid = $rs->result(); return $userid; 我看不懂,请用代码更新您的问题,以便更容易阅读。谢谢 哦,对不起,有道理...刚刚更新了问题 【参考方案1】:

我认为这应该可行:

public function getUsers($userid = NULL)

    $rs = $this->load->database('social', TRUE);
    if (empty($userid) ) 
        $rs->select("id, username")
        ->from("user")
        ->get();
        $userid = $rs->result();
    return $userid;
    
    elseif (isset($userid)) 
        $rs->select("id, username")
        ->from("user")
        ->where('id', $userid)
        ->get();
        $userid = $rs->result();
    return $userid;
    

【讨论】:

试过你的建议,但是没有运气,甚至没有得到一个可用的错误 @NicolaiHolmøThomsen 我建议联系专业开发人员。 @NicolaiHolmøThomsen 您可以尝试在页面顶部设置 error_reporting(E_ALL); 或查看 ***.com/questions/7843406/… 以了解 CodeIgniter 特定的错误处理,但我认为您最初连接到不同数据库的问题可能已经解决根据您提供的代码 sn-p。 我终于成功了...您的建议确实有帮助,但是我也没有正确的用户权限,所以在更改之后一切正常...非常感谢! @NicolaiHolmøThomsen 很高兴听到这个消息!我很高兴你把它整理好了,因为我想我不会猜到你也需要修复用户权限:)

以上是关于Codeigniter,调用多个数据库的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter,调用多个数据库

使用 codeigniter ci_marchant_Lib 库的 PayPal 定期付款

CodeIgniter 活动记录调用多个存储过程的问题

Codeigniter 中的多个连接

CodeIgniter:多个数据库 - 在第二个数据库中访问数据库配置

模型类应该代表一个实体还是返回它