- 普通 - 未处理
[i=s] 本帖最后由 oo123ooiiiii 于 2011-9-22 10:45 编辑 [/i]使用的是TP版本是2.0。php版本5.2.11
看到论坛里有很多其他同学也遇到了这个bug。
问题:
本着尽量少修改的原则:我的使用多数据库的代码写在某给Model类中
class xxxModel Extends Model {
protected $autoCheckFields = false;
public function _initialize(){
$this->connection = array (
'dbms' => C('DB_TYPE'),
'username' => C('DB_USER'),
'password' => C('DB_PWD'),
'hostname' => C('DB_HOST'),
'hostport' => C('DB_PORT'),
'databa
'dsn' => C('DB_DSN'),
'params' => C('DB_PARAMS'),
);
}
}
这个类初始化完全没问题,但是在该类中使用query方法时数据库连接配置并不对。
调试了几个小时,发现原因在于Db::multiConnect()的第一行:
static $_config = array();
不管Model类被New了多少次,这个变量的值都是一个。
测试代码:
class a {
function aaa($aaa){
static $a = '';
if(empty($a)){
$a = $aaa;
}
echo $a;
}
}
$a = new a();
$a1 = new a();
$a->aaa('123');
$a1->aaa('456');
修改方法:
1、我的环境中数据库连接没有变,就是库变了,只需修改查询语句给表名加上前缀即可。
2、如果数据库连接也变化了的情况就需要修改源代码
修改源码建议方式:
复制一份Db.class.php
在index.php最后require 该文件。
复制的 class Db中增加 private $_config;
将 mutiConnect方法中 static $_config = array();替换为 $this->_config
(未测试、可能需要同时复制相关的Driver文件夹)
联系方式 我的用户名[at]gmail.com (欢迎讨论)
