数据库切换问题

#1 zhijiangch

model文件:
1.userModel.php
class userModel extends spModel
{
  var $pk = "userid";      
  var $table = "user";   

  public function __construct()
  {         
         $GLOBALS['G_SP']['db']['database'] = 'master';          
             
     parent::__construct();
  }

}
2.customerModel.php
class customerModel extends spModel
{
  public $pk = "id";        // 主键 var(public private protect)
  public $table = "wl_customer"; // 数据表的名称

  public function __construct()
  {     
     if(isset($_SESSION['groupid'])){
                $GLOBALS['G_SP']['db']['database'] = 's'.$_SESSION['groupid'];
         }else{
            echo "数据库信息不存在";exit;
         }   
     parent::__construct();
  }  
}


controller文件:

第一种情况:单独操作master数据库连接没问题
///////////////////////////////////////
user.php
$tb_user = spClass("userModel");
...
...
$tb_user->create($data);
///////////////////////////////////////

第二种情况:单独操作's'.$_SESSION['groupid']数据库连接没问题
///////////////////////////////////////
customer.php
$tb_customer = spClass("customerModel");
...
...
$tb_customer->create($data);
///////////////////////////////////////


第三种情况$tb_user连接的仍是's'.$_SESSION['groupid']数据库,而不是master
///////////////////////////////////////
test.php
$tb_customer = spClass("customerModel");
...
...
if($tb_customer->create($data)){
   $tb_user = spClass("userModel");
     ...
     ...
   $tb_user->create($data);
}
///////////////////////////////////////


2015-12-09 17:44:46

#2 jake

简单来说,spModel是单例的,所以光两次用spClass是不会改变它指向的数据库配置。

真正改变的方法,建议稍微看看手册 http://www.speedphp.com/thread-3794-1-1.html

2015-12-09 18:05:52

#3 zhijiangch

这个问题变相说明,不是单例一次就连接一次数据库,这样提高了执行效率,非常好!

2015-12-09 18:55:24