一个数据库切换问题
发布于:2022-01-17 09:50:54
#1 zhijiangch
有多个数据库,比如:master,s10001,s10002,s10003....... //默认数据库配置
"db" => array(
'host' => 'localhost',
'login' => 'root',
'password' => '123456',
'database' => 'master',
)
如果切换到s10001,按正常切换:
$config => array(
'host' => 'localhost',
'login' => 'root',
'password' => '123456',
'database' => 's10001',
)
$new_db = spClass('db_mysql',$config,SP_PATH.'/Drivers/mysql.php',TRUE);
但每次都这样切换有点麻烦,我在spController.php写了一个函数
public function connDB($new_db = ''){
$config = array(
'host' => $GLOBALS['G_SP']['db']['host'],
'login' => $GLOBALS['G_SP']['db']['login'],
'password' => $GLOBALS['G_SP']['db']['password'],
'database' => $new_db,
);
return spClass('db_mysql',$config,SP_PATH.'/Drivers/mysql.php',TRUE);
}
执行结果:
方法 connDB未定义!研究了老半天,也没解决
2015-10-23 20:44:37
#2 zhijiangch
$conn = $this->connDB("s10001");
$db = spDB("table");
$db->db = $conn;
$this->dump($db->findAll());
2015-10-23 20:52:01
#3 zhijiangch
直接连接也不行,这两个数据库都存在:
$config = array(
'host' => 'localhost',
'login' => 'root',
'password' => '123456',
'database' => 's10001', //换成master也不行
);
$conn = spClass('db_mysql',$config,SP_PATH.'/Drivers/mysql.php',TRUE);
报错信息:
无法找到数据库,请确认数据库名称正确!
2015-10-23 21:02:37
#4 zhijiangch
正常连接连上了,那个函数还是不行
错误:$conn = spClass('db_mysql',$config,SP_PATH.'/Drivers/mysql.php',TRUE);
正确:$conn = spClass('db_mysql',
array($config),SP_PATH.'/Drivers/mysql.php',TRUE);
2015-10-23 21:37:25
#5 jake
提示:方法 connDB未定义!
那么应该是说程序找不到你这函数,跟连不连的上有什么关系???
2015-10-23 22:54:00
#6 minijedy
我是直接把配置写入一个DB.php, 然后引入这个php,
$dsn_oracle = spClass('db_oracle',require_once(APP_PATH."/***/db.php"), SP_PATH.'/Drivers/oracle.php',TRUE);我用的ORACLE数据库
2015-10-27 09:03:12
#7 zhijiangch
规范的写法还是在model中:若是同一类型数据库(比如mysql)更简单,仅仅改变配置中
$GLOBALS['G_SP']['db']['database'] 的值:class muser extends spModel
{
public $pk = "id"; // 主键 var(public private protect)
public $table = "wl_user"; // 数据表的名称
public function __construct(
$new_database)
{
$GLOBALS['G_SP']['db']['database'] = $new_database; parent::__construct();
}
}
若是每个用户分配一个数据库的情况,并且数据库命名有一定规则,比如:s+userid,用session这样更简单,传值都不用了,直接用这个model连接的就是对应的数据库
class muser extends spModel
{
public $pk = "id"; // 主键 var(public private protect)
public $table = "user"; // 数据表的名称
public function __construct()
{
if(isset($_SESSION['userid'])){
$GLOBALS['G_SP']['db']['database'] = 's'.$_SESSION['userid']; }else{
echo "用户登录信息不存在";exit;
}
parent::__construct();
}
}
2015-10-27 10:10:01
#8 jake
“每个用户分配一个数据库”,6666666666666666
2015-10-27 11:26:56
#9 冈刀飞絮
脑洞大开,这是做一些分销业务大代理系统的做法,{:soso_e113:}
2015-10-27 16:45:59