colin_xia 发表于 2012-3-15 11:21:21

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

环境:
       wamp : php 5.3.1      sql server 2005
代码:

<?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); 的后面就正常了。

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



colin_xia 发表于 2012-3-15 14:31:05

知道原因了: 我的两个数据库在同一数据库服务器上。 加载第一个数据库和第二个数据库返回的 resourceid
是一模一样的。 只是关联的具体数据库不一样。

如果两个数据库不在同一服务器上。这时才是按照我的期望工作。

colin_xia 发表于 2012-3-15 14:56:28

colin_xia 发表于 2012-3-15 14:31 static/image/common/back.gif
知道原因了: 我的两个数据库在同一数据库服务器上。 加载第一个数据库和第二个数据库返回的 resourceid
...

找到解决方法了:修改 db_driver.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);
        }
页: [1]
查看完整版本: ci 连接多个sql server 工作不正常