首页 > PHP开发 > thinkphp框架如何在控制器中切换数据库?

thinkphp框架如何在控制器中切换数据库?

作者: 分类:PHP开发 点击: 7,847 次

    通过thinkphp框架开发网站,一般情况下,我们只会用一个数据库,这时不会碰到切换数据库的问题。但是,有时,需要多个数据库,比如:多网站管理系统开发,后台与前台的数据库是要分离的,后台数据库只记录前台网站的相关信息而不记录前台网站的分类文章等详细内容,前台数据库则存放文章等详细内容,并且,会有多个前台网站,也就是说,会有多个前台数据库。这时,如果后台要调用前台内容或前台调用后台信息时,就需要切换数据库了。

    thinkphp框架如何切换数据库?

    方法一:切换数据库调用Model类的db方法

    $this->db(1,"mysql://root:123456@localhost:3306/test")->query("查询SQL");

    如果在控制器中,可以通过M()方法:

    M()->db(1,"mysql://root:123456@localhost:3306/test")->query("查询SQL");

    该方法添加了一个编号为1的数据库连接,并自动切换到当前的数据库连接。当第二次切换到相同的数据库的时候,就不需要传入数据库连接信息了,可以直接使用:

    $this->db(1)->query("查询SQL");

    方法二:实例化Model类,这个比较灵活:

    先将数据库信息放到数组中:

    $connect = array(
    'db_type' => 'mysql',// 数据库类型
    'db_host' =>'localhost',// 服务器地址
    'db_name' => 'ssmay', // 数据库名
    'db_user' => 'root', // 用户名
    'db_pwd' => '123456', // 密码
    'db_port' => 3306,
    'db_charset' => 'utf8',
    );

    切换数据库并实例化Model类:

    $list = new \Admin\Model\PostModel('Post','',$connect);

    然后,我们就可以通过对象$list来调用 ssmay数据库post表时的信息了,如获取所有文章列表:

    //分页显示文章列表
    $count = $list->count(); //获取文章总数
    if($count==0){
    $this->error("目前,该网站没有任务文章。");
    }
    $page = new \Think\Page($count,10);
    $page->setConfig('prev','上一页');
    $page->setConfig('next','下一页');
    $show = $page->show(); //显示分页
    $posts = $list->order("post_id desc")->limit($page->firstRow,$page->listRows)->select();

    当然,还有其它方法可以切换数据库,如分布式数据库、php原始连接。在thinkphp框架开发过程中,我只试了上面2种方法,都是有效果的,在开发多网站系统时,我比较喜欢用第二种方法,因为它使用起来比较灵活方便。



文章作者:码不停蹄
本文地址:http://wanlimm.com/77201608095134.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

上一篇:
下一篇:

或许你会感兴趣的文章:

一条回应:“thinkphp框架如何在控制器中切换数据库?”

  1. avatar 你好说道:

    感谢楼主的方,可是亲测了一下效率有点低

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.