用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2475|回复: 2
收起左侧

[HELP] ci 连接多个sql server 工作不正常

[复制链接]
发表于 2012-3-15 11:21:21 | 显示全部楼层 |阅读模式
环境:
       wamp : php 5.3.1      sql server 2005
代码:
PHP复制代码
 
<?php
class Admapp_model extends CI_Model {
 
        protected $messages;
 
        protected $errors;
 
        function __construct()
        {
                parent::__construct();
                $this->erpdb = $this->load->database('test',true);
                $this->sysdb = $this->load->database('default',true);
                $this->load->helper('cookie');
                $this->load->helper('date');
                $this->load->library('session');
        }
 
 
        // 获取 erp 服务器的职员信息
        public function erp_emps(){
                $this->erpdb ->select('fitemid ,fname ,fdeleted ,fdepartmentid')
                            ->from('t_Emp');
                return $erpdb->get()->result();
        }
 
 
 
复制代码


说明:
        1.  运行 erp_emps 会报错 ”对象名 't_Emp' 无效。“
        2.   两个数据都设置了 pconnect  为false
        3.   注释 $this->sysdb = $this->load->database('default',true);
              或者把    $this->erpdb = $this->load->database('test',true); 放到  $this->sysdb = $this->load->database('default',true); 的后面就正常了。

结论:
       每次 load  database 时前面load 的database 连接都被覆盖了。
       不知道有没有其他人碰到过这种问题。CI 的漏洞?



 楼主| 发表于 2012-3-15 14:31:05 | 显示全部楼层
知道原因了: 我的两个数据库在同一数据库服务器上。 加载第一个数据库和第二个数据库返回的 resource  id
是一模一样的。 只是关联的具体数据库不一样。

如果两个数据库不在同一服务器上。这时才是按照我的期望工作。
 楼主| 发表于 2012-3-15 14:56:28 | 显示全部楼层
colin_xia 发表于 2012-3-15 14:31
知道原因了: 我的两个数据库在同一数据库服务器上。 加载第一个数据库和第二个数据库返回的 resource  id
...

找到解决方法了:修改 db_driver.php 文件

PHP复制代码
        function simple_query($sql)
        {
                // change by colin 2012-03-15
                // 目的是实现多数据库连接。通过每次查询前执行  initialize 函数 切换到正确的数据库
//              if ( ! $this->conn_id)
//              {
                        $this->conn_id = '';
                        $this->initialize();
//              }
               
                return $this->_execute($sql);
        }
复制代码

本版积分规则