多个php 链接数据库,ThinkPHP实现多数据库连接的解决方法

1.ThinkPHP实现连接多个数据的时候,如果数据库在同一个服务器里的话只需要这样定义模型:

Model:

namespace Shebao\Model;

use Common\Model\CommonModel;

class CeshiModel extends CommonModel{

protected $trueTableName = 'shebao.sb_person'; //数据库名.表名(包含了前缀)

public function index()

{

}

}

Controller:

public function index(){

$ceshi = D('Shebao/Ceshi');

$data = $ceshi->where(['id'=>'86368'])->find();

dump($data);die;

}

然后就可以像D('Shebao/Ceshi');这样实例化模型,像普通模型那样操作了。

2.数据库在两个不同的服务器,这样上面的方法就不行了:

这时候就需要使用TP的多数据连接特性了。

对此,查阅官方文档进行测试并修正之后得出了如下的解决方法:

要建立多数据连接,

首先要构造数据库配置参数。

但是如果每次都在建立多数据库连接的时候都建立数据库配置数组,这样就会很麻烦,还不如写在配置文件里。

这里怎么写还是需要有点技巧的。

$config= array(

'DEBUG_MODE'=>true,

'default_module'=>'Index',

'ROUTER_ON'=>TRUE,

'DATA_RESULT_TYPE'=>1,

'SHOW_RUN_TIME'=>true, // 运行时间显示

'SHOW_ADV_TIME'=>true, // 显示详细的运行时间

'SHOW_DB_TIMES'=>true, // 显示数据库查询和写入次数

'SHOW_CACHE_TIMES'=>true, // 显示缓存操作次数

'SHOW_USE_MEM'=>true, // 显示内存开销

'HTML_FILE_SUFFIX'=>'.shtml', // 默认静态文件后缀

'HTML_CACHE_ON' =>false, // 默认关闭静态缓存

'HTML_CACHE_TIME'=>60, // 静态缓存有效期

'HTML_READ_TYPE'=>1, // 静态缓存读取方式 0 readfile 1 redirect

'HTML_URL_SUFFIX'=>'.shtml', // 伪静态后缀设置

//主要看这里就可以了:

//默认数据库链接

'DB_TYPE'=>'mysql',

'DB_HOST'=>'localhost',

'DB_NAME'=>'news',

'DB_USER'=>'root',

'DB_PWD'=>'123',

'DB_PORT'=>'3306',

'DB_PREFIX'=>'news_',

//我的第一个数据库连接

'DB_BBS'=>array(

'dbms' => 'mysql',

'username' => 'discuz',

'password' => '123',

'hostname' => 'localhost',

'hostport' => '3306',

'database' => 'discuz'

),

//第二个数据库链接,

'DB_NEWS'=>array(

'dbms'=>'mysql',

'username'=>'root',

'password'=>'123',

'hostname'=>'localhost',

'hostport'=>'3306',

'database'=>'news'

)

);

return $config;

?>

至此我们就可以用C("DB_BBS")和C("DB_NEWS")来得到数据库的配置数组。

配置好了,现在需要实例化模型。

因为我们这个模型需使用两个不同的数据库的连接,项目的配置文件里默认了个数据库配置,如果你建立了某个表的模型比如UserModel.class.php,

如果你用D("User");但假如当前默认的数据库里没User个表的话就会报错。

所以我们要建立个空模型。空模型是不会选表的。

有两种方法建立空模型。 $dao=D();和$dao=new Model(); 都可以。

实例化模型后,我们需要增加数据库模型:

$dao->addConnect(C("DB_BBS"),1,true);

$dao->addConnect(C("DB_NEWS"),2,true);

说一下这个addConnect();这个函数的原型在1.0.3和1.0.4是有区别的。

在1.0.3的原型是:

boolean addConnect (mixed $config``, mixed $linkNum``, [boolean $eqType = true])

在1.0.4的原型是:

boolean addConnect (mixed $config``, mixed $linkNum``)

少了第三个参数。

第一个参数是数据库的配置数组,第二个参数是添加的连接的编号,这个编号在切换数据库连接的时候需要给出是那个序号的连接。

注意 :

内置的数据库连接序号是0,所以额外的数据库连接序号应该从1开始.第三个参数是 如果两个数据库是否是相同的连接,是就是true;

添加完数据库连接后,就可以随时切换数据库连接了。比如我们这要用DB_NEWS这个数据库,就这么写:

$dao->switchConnect(2);

因为这里只是建立了数据库的连接,并没有选表,所以接下来需要选表。

注意这里的表名是全名,即表的前缀加表名。因为我们在连接数据库的配置数组里没前缀。我觉得应该可以定义,但我不知道。现在就这样了。

$dao->table("cdb_members");

之后就可以像普通模型一样的用这个模型了。

比如我要查询传递过来的ID的用户的所有信息 :

$map=array("id"=>$_GET["id"]);

$res=$dao->find($map);

可以看看查询是否成功了。

dump($res);

如果你现在要用DB_BBS的数据库的表,只需再切换一次连接;

$dao->switchConnect(1);

然后再选表查询。记住,切换模型后一定要再选一次表,不然会出错。

之后又可以像普通模型那样操作了。

下面针对手册指出里面存在的几处问题:

1.实例化多数据库连接的时候建立了个非空的模型。(好像还写错了。)这样可能会出错。建议建立空模型;

2.addConnect()的参数在不同的版本是不同的,手册中没写出来;

3.建立了空模型后需要选表,这个手册里没有。

针对以上几点,ThinkPHP使用者可以根据版本的不同酌情进行相应的调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程之美 - 哪个题目最美?

编辑部搞的活动, 请大家帮个忙,来投票吧,看看《编程之美》第1章“游戏之乐——游戏中碰到的题目”大家最喜欢哪个题目,或者大家认为哪个题目最有趣。         可以选择以下任何网址参与投票:   CSDN&#xff1…

php实现把es6转为es5,使用webpack将ES6转化ES5的实现方法

babel使用打开babel官网,按教程安装babel安装npm install --save-dev babel-loader babel/core babel/preset-env配置rulesmodule: {rules: [{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }]}生成 .babelrc文件{"presets"…

BUAA - 各项目组对软件用户数的估计

项目组: 底限 - 高限 CodeHolic: 200 – 1000 Code Canvas: 30 – 200 Stone: 50 – 200 Bugzapper: 100 - 1,000 CodeAngel: 200 – 800 Dream: 500 – 800 Xirtam: 1 – 100 Terminator: 100 – 300

THU – team project final review score

FOCUS Lifer: 24.14 Quadriad: 13 Transformer5: 16.71 LunaR: 24.57 Dragon: 17.86 (full score is 30pts, from 7 judges)

ssl在线申请php源码,简易实现HTTPS之自动实现ssl

众所周知 HTTP 协议是一种不安全的协议, 而 HTTPS 协议是 HTTP over SSL/TLS 的缩写,表示“使用 SSL/TLS 的 HTTP ,也就是通常所说的“超文本传输安全协议”。 HTTP 搭配 SSL/TLS 协议可以搭建加密传输、身份认证的网络协议。没有升级到 HTTP…

BUAA - Team Review Score

Team Review Score1 19.002 22.573 19.864 17.005 26.146 21.437 17.438 20.29

php怎么上传函数,php上传函数怎么封装

php上传函数怎么封装&#xff1f;<?php //上传文件调用 $file $_FILES[image]; //允许上传的类型 $allow array(image/jpeg, image/png, image/jpg, image/gif); $path ./uploads; $maxsize 1024 * 1024 * 3; $result upload($file, $allow, $error, $path, $maxsize)…

THU: 成绩录入系统的bug

各位老师&#xff0c;您好&#xff01; 本学期课程网上录入成绩的时间马上就要截止&#xff0c;请注意&#xff01; 1、 录入成绩系统开通时间&#xff1a;2010年1月8日&#xff08;周五&#xff09;8&#xff1a;30 &#xff5e; 1月27日&#xff08;周三&#xff09;16&…

php-frm进程管理,PHP内核探索-进程管理

进程管理方式首先我们了解一下php的三种不同的进程管理方式&#xff1a;static&#xff1a;静态管理进程。在启动时&#xff0c;master按照pm.max_children配置fork出对应数量的work进程&#xff0c;即work的进程是固定不变的。dynamic&#xff1a;动态管理进程。在fpm启动时先…

THU – team players 合作精神

我朝的教育体系虽然时不时灌输“互相帮助”的精神&#xff0c;但是所有小考&#xff0c;中考&#xff0c;大考&#xff0c;无一不是考察个人独立作战。你要互相帮助&#xff0c;不但违反考场纪律&#xff0c;而且其他同学的好成绩对你是一个直接的威胁。 在这种价值体系下产出的…

PKU 学生的反馈 2009-1

反馈1: 软件实现技术课程总结 (1) 本学期的《软件实现技术》课程顺利结束了。作为选择这门课的学生&#xff0c;我在这里对这门课做一个回顾&#xff0c;并总结一下我对这门课的一些感受。 《软件实现技术》这门课是微软和北大软件与微电子学院合作的一门课程&#xff0c;课…

php 导出txt 缩进,indent - 缩进文本

缩进每一行的字符串&#xff0c;默认是缩进4个空格。 可选的参数可以设置缩进的空格数量。 可选的第二个参数设置缩进使用的字符&#xff0c;如用 "\t" 来代替空格缩进。参数顺序类型必选参数默认值说明1integerNo4设置缩进多少空格2stringNo一个空格设置用什么字符来…

PKU 学生的反馈 2009 –2

《软件实现技术》课程总结 从义无反顾选择了《软件实现技术》这门课程到现在已经整整4个月了&#xff0c;现在课程完满结束&#xff0c;有些东西是该总结一下了。 第一次上课的时候&#xff0c;除了软微的蒋老师、郁老师&#xff0c;微软的几位老师也参加了。邹欣老师强调作业…

oracle中主键自增长,oracle 数据库主键自动增长方法

oracle 数据库没有像 MYSQL一样有 自动ID增值 的功能&#xff0c;如要实现可以用触发器。首先就是建立一个序列&#xff0c;序列有有自动增值的功能,再建立一个触发器。如&#xff1a;建立一个序列CREATE SEQUENCE auto_seqminvalue 1 -- 最小值increment by 1 -- 每次增加值数…

PKU 学生反馈 3

[罗列了一些学生的反馈] 1. 作业的内容与时间要求上更加固定、明确。或者对于变化预先说明。 2. 课程的理论部分可以更加吸引人&#xff0c;该部分通过预习-考试-讲解的方式加深理解。 3. 预先说明本课程的定位 4. 希望每个团队有一个mentor知道下项目开发过程。 5. 对于所…

oracle 创建模式语句,ORACLE基本使用SQL语句以及归档模式的操作

--1、查看表空间的名称及大小SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0)ts_sizeFROM dba_tablespaces t, dba_data_files dWHERE t.tablespace_name d.tablespace_nameGROUP BY t.tablespace_name;--2、查看表空间物理文件的名称及大小SELECT tablespac…

PKU 学生反馈 2009 - 4

匿名反馈&#xff0c;分值为 1..9 分。 1 content depth 7.31 您对课程内容深度的满意程度 How satisfied are you with the content depth? 2 topic coverage 7.39 您对教材内容广度的满意程度 How satisfied are you with the topic coverage? 3 slides 7.62 您对投…

php sql好处,关于php:使用Doctrine与SQL相比,使用DQL有什么好处?

当在使用Doctrine类时需要自定义查询时&#xff0c;有人可以为我提供一些明确的理由(支持事实)来使用/学习DQL与SQL吗&#xff1f;我发现&#xff0c;如果无法使用ORM的内置关系功能来实现某些目标&#xff0c;通常会在扩展的Doctrine或DoctrineTable类中编写自定义方法。在这种…

我写的博客居然是百度搜索第一名 - 感谢国家 …

http://www.baidu.com/s?bs%BD%E1%BB%E9%C2%BC%CF%F1%BA%CD%CF%E0%B2%E1%BC%AF&f8&wd%CE%D2%BA%CD%CB%FB%B5%C4%BD%E1%BB%E9%C2%BC%CF%F1%BA%CD%CF%E0%B2%E1%BC%AF 而且这个“结婚录像和相册集”还在传播中&#xff0c; 刚刚看到 Tao Mei 同学也在他的space 中加上了。…

CSDN 首页的第一屏 广告/新闻 比率 = 40 : 2

有一天我不小心开了 www.csdn.net, 定睛端详许久&#xff0c; 我只看到 2 条新闻 (连线杂志 和 金山震荡) 。 其他的除了两行导航条&#xff0c;都是广告 &#xff08;导航条下面的那一行看似第三条导航条&#xff0c;其实也是广告&#xff09;。 其中右下角的窗口上有六个广…