如何解决ThinkPHP实现多jsp连接数据库实现用户登录功能连接的方法

您好,欢迎进入ASP编程网!您好,
当前位置:>>>&&正文
thinkphp3.2中多个数据库的完美解决方法
13:46:06&&&来源:www.aspbc.com&&&作者:wangsdong&&&浏览量:674&&&
如果想在使用thinkphp开发的网站中使用两个数据库怎么办?今天遇到了这个问题,在百度上找了很多方法,最终解决了。我在这里总结一下,供以后遇到此问题的朋友们参考。
打开Conf/config.php文件
里面的代码写成如下:
return array(
& & & & //'配置项'=&'配置值'
& & & & //数据库配置信息
//默认数据库
& & & & 'DB_TYPE'& &=& 'mysql', // 数据库类型
& & & & 'DB_HOST'& &=& 'localhost', // 服务器地址
& & & & 'DB_NAME'& &=& 'thinkphp', // 数据库名
& & & & 'DB_USER'& &=& 'root', // 用户名
& & & & 'DB_PWD'& & =& 'root', // 密码
& & & & 'DB_PORT'& &=& 3306, // 端口
& & & & 'DB_PREFIX' =& 'think_', // 数据库表前缀
& & & & 'DB_CHARSET'=& 'utf8', // 字符集
& & & & 'DB_DEBUG'& =&& TRUE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增
& & & & 'SESSION_AUTO_START' =& true, //是否开启session
& & & & 'DEFAULT_THEME'& & & =&& & 'default',& &
& & & & //第二个数据库
& & & & 'DB_STOCK' =& array(
& & & & & &'db_type'& =& 'mysql',
& & & & & &'db_user'& =& 'root',
& & & & & &'db_pwd'& =& 'root',
& & & & & &'db_host'& =& 'localhost',
& & & & & &'db_port'& =& '3306',
& & & & & &'db_name'& =& 'thinkphp2',
使用两个数据库,这样就配置好config.php了
下面介绍如何使用?
//使用默认数据库中的内容
$list1 = M('table2')-&limit(10)-&select();
print_r($list1);
//使用第二个数据库中的内容
$list2 = M('table2','','DB_STOCK')-&limit(10)-&select();
print_r($list2);
注意红色的地方,这样就完美解决多个数据库的问题了,三个或者三个以上的数据库,参考这个解决。
原创文章,转载请注明来源,谢谢。
最新相关教程
Copyright(C)版权所属asp编程网ThinkPHP实现连接多个数据的时候,如果数据库在同一个服务器里的话只需要这样定义模型:
class MembersModel extends Model{
protected $trueTableName = 'members.members'; //数据库名.表名(包含了前缀)
然后就可以像D("Members");这样实例化模型,像普通模型那样操作了。
但后来发现他的数据库在两个不同的服务器,这样上面的方法就不行了。
这时候就需要使用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'
至此我们就可以用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(2);
然后再选表查询。记住,切换模型后一定要再选一次表,不然会出错。
之后又可以像普通模型那样操作了。
下面针对手册指出里面存在的几处问题:
1.实例化多数据库连接的时候建立了个非空的模型。(好像还写错了。)这样可能会出错。建议建立空模型;
2.addConnect()的参数在不同的版本是不同的,手册中没写出来;
3.建立了空模型后需要选表,这个手册里没有。
针对以上几点,ThinkPHP使用者可以根据版本的不同酌情进行相应的调整。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。提供主流cms教程
提供数据库教程和设计
提供各种常见网页js代码
提供常用的JS特效代码及在线演示
提供jQuery插件教程及插件下载
提供服务器常见问题及教程
提供常用开发手册和开发工具
您现在的位置:& >
Thinkphp链接多个数据库如何调用M方法
$custom&=&M('base','branch_','shop');&&
&&&$list&=&$custom-&select();&
&&&var_dump($list);die;&ThinkPHP3.1新特性 多数据库操作的完善
Think3.1新特性 多操作的完善
正常情况下,如果应用只是操作同一个数据库(或者分布式数据库)的话,你只需要在项目配置文件中定义数据库连接信息即可,这里说的多数据库操作一般指的是在一个应用中会操作不同的数据库(包括同类型的和不同类型的数据库),甚至包括动态切换多数据库的情况。
早期版本的ThinkPHP切换数据库需要使用高级模型,现在可以更加轻松的解决了。
新版对多数据的支持有下面几种方式,开发人员可以根据实际情况选择合适的方式操作:
模型定义数据库
如果只是简单的跨库操作,并且只是个别模型类的话,你可以直接在模型类中定义dbName属性即可:
protected $dbName = 'top';
实例化的时候,记得要使用D方法,例如:
$User = D('User');
这种方式定义的前提是当前数据库用户账户有操作top数据库的权限。
模型定义数据库连接
如果你的跨库操作需要使用不同的数据库连接账号或者需要连接不同类型的数据库,可以直接在模型类里面定义connection属性,在操作该模型类的时候,就会自动连接到指定的数据库,例如:
protected $connection = '://root:1234@localhost:3306/thinkphp';
或者使用数组方式定义:
protected $connection = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd'
=> '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp' );
如果我们已经在配置文件中配置了额外的数据库连接信息,例如:
//数据库配置1'DB_CONFIG1'=array('db_type'=>'mysql','db_user'=>'root','db_pwd'=>'1234','db_host'=>'localhost','db_port'=>'3306','db_name'=>'thinkphp'),//数据库配置2'DB_CONFIG2'=>'mysql://root:1234@localhost:3306/thinkphp';
那么,我们可以把模型类的属性定义改为:
//调用配置文件中的数据库配置1protected$connection='DB_CONFIG1';
//调用配置文件中的数据库配置2protected$connection='DB_CONFIG2';
这种方式的优点可以支持不同数据库类型,也就是说可以和当前的项目配置文件中的数据库类型不同,缺点是必须使用D方法实例化,而且不能动态设定。
模型实例化指定连接
新版支持在实例化模型的时候指定数据库连接,例如:
$User = new Model('User','think_','mysql://root:1234@localhost/thinkphp');
或者使用M方法实例化:
$User = M('User','think_','mysql://root:1234@localhost/thinkphp');
M方法的第二个参数是数据表的前缀,如果留空表示采用项目配置的数据表前缀,第三个参数则是当前实例化需要的数据库连接信息。
同样的道理,在实例化中传入的数据库连接信息也可以采用配置名称的方式,例如:
$User = M('User','think_','DB_CONFIG2');
如果当前操作不需要切换数据库连接,只是需要切换数据库,则可以采用:
$User = M('top.User','think_');
表示实例化top数据库的think_user数据表,如果你的数据表没有前缀,可以使用
$User = M('top.User',null);
表示实例化top数据库的user表。
动态切换连接
还提供了更灵活的动态操作,可以使用模型类提供的db方法进行多数据库连接和切换操作,用法:
Model->db("数据库编号","数据库配置");
数据库编号用数字格式,对于已经调用过的数据库连接,是不需要再传入数据库连接信息的,系统会自动记录,对于初始化的数据库连接,内部的数据库编号是0,因此为了避免冲突,请不要再次定义数据库编号为0的数据库配置。
数据库配置的定义方式和模型定义connection属性一样,支持数组、字符串以及调用配置参数三种格式。
Db方法调用后返回当前的模型实例,直接可以继续进行模型的其他操作,所以该方法可以在查询的过程中动态切换,例如:
$this->db(1,"mysql://root:123456@localhost:3306/test")->query("查询SQL");
该方法添加了一个编号为1的数据库连接,并自动切换到当前的数据库连接。
当第二次切换到相同的数据库的时候,就不需要传入数据库连接信息了,可以直接使用:
$this->db(1)->query("查询SQL");
在没有再次进行数据库切换之前,当前的所有操作都是针对db(1)所设置的数据库。
如果需要切换到默认的数据库连接,只需要调用:
$this->db(0);
如果我们已经在项目配置中定义了其他的数据库连接信息,我们就可以直接在db方法中调用配置进行连接了:
$this->db(1,"DB_CONFIG1")->query("查询SQL"); $this->db(2,"DB_CONFIG2")->query("查询SQL");
如果切换数据库之后,数据表和当前不一致的话,可以使用table方法指定要操作的数据表:
$this->db(1)->table("top_user")->find();
如果要返回当前的数据库连接,可以直接调用空的db方法即可,例如:
$db = $this->db();ThinkPHP实现多数据库连接的解决方法 - 简书
ThinkPHP实现多数据库连接的解决方法
1.ThinkPHP实现连接多个数据的时候,如果数据库在同一个服务器里的话只需要这样定义模型:
namespace Shebao\M
use Common\Model\CommonM
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);
然后就可以像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'
至此我们就可以用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开始.第三个参数是 如果两个数据库是否是相同的连接,是就是
添加完数据库连接后,就可以随时切换数据库连接了。比如我们这要用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使用者可以根据版本的不同酌情进行相应的调整。
尚未配妥剑,转眼便江湖
愿历经千帆,归来仍少年
国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿: 前言: 排版 by Dr_Ting公众号:庭说移步 tingtalk.me 获得更友好的阅读体验 Q/GDW XXXX-201X《面向对象的用电信息数据交换协议》是根据《国家...
pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 1. 面向对象都有哪些特性以及你对这些特性的理解 21 2. 访问权限修饰符public、private、protected, 以及不写(默认)时的区别(201...
//我所经历的大数据平台发展史(三):互联网时代 o 上篇http://www.infoq.com/cn/articles/the-development-history-of-big-data-platform-paet02 编者按:本文是松子(李博源)的大数据平台发展史...
需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的...
来源:郭霖大神http://blog.csdn.net/guolin_blog/article/details/ 要想熟练地操作任何一个数据库,最最基本的要求就是要懂SQL语言,这也是每个程序员都应该掌握的技能。虽说SQL博大精深,要想精通确实很难,但最基本...
【赶海踏浪行】 举目瑶天万里空,湛蓝海宇上下同。 一线均分极目外,条条雪练锁长虹。 几朵白云同帆色,一群鸥鸟戏浪踪。 金焰浮沉耀晓日,洪波跌宕洗枯荣。 莱州湾里春潮早,石坝蟠龙绕胶东。 涛头飞溅迸玉碎,席卷礁石吞吐中。 沉沙随浪风扬尽,无限遐思此情浓。 人生苦短凭际...
《欢乐颂2》的安迪。感觉自己把安迪的气质画没了,水平还是幼稚园的水平,看来还是得好好修炼下。加油。话说安迪真的很有气质。么么哒。下次把图画大点,这样细节可控制得更好。 —— 关于@Eling.兔小瘦 Hi,我就是传说中的Eling.兔小瘦,文艺Girl一...
(三)语言种类与学习顺序 大家知道,语言有语言谱系之说。语言的谱系,其由来大致如此,19世纪时,欧洲的比较学派研究了世界上近一百种语言,发现有些语言的某些语音、词汇、语法规则之间有对应关系,有相似之处。于是,便将其归为一类,称为同族语言。由于有的语族与语族之间又有些对应关系...
今天我来说说18年的广东省考写作题议论文如何高分突破? 购买课程的同学会获得视频详细的解析内容,课程地址2018年广东省考申论课程。 议论文写作思路值得特别重视 17年广东省考打破多年传统,县级出了议论文而非往年的策论文,这个转变是特别需要你注意。 论证道理阐述观点的议论文...
这一刻,我嘴里的尖椒炒饭仿佛没有了滋味,耳边正好一阵汽车轰鸣声,和我的心一直在跳动。 在公交车上,等着红灯的那几秒,耳机里是星愿物语,恍惚之间, 我仿佛听到了,曾经小学在我后排叫刘艳的那个女孩,对着我唱歌,只记得她甜甜的酒窝。 嗯,车动了。

我要回帖

更多关于 jsp实现连接数据库并且验证 的文章

 

随机推荐