Drupal7连接多个数据库及常见问题解决

 这篇文章主要介绍了Drupal7连接多个数据库的方法、操作实例,以及常见问题解决方法,需要的朋友可以参考下

如果你遇到这些问题:
1.Drupal如何连接到多个数据库?
2.Drupal连接到多个数据库后,但是发现程序报错,这是怎么了?
3.Drupal获取、添加、修改、删除多个数据库时,数据没有正确的写入数据库或者读取到空的数据,怎么解决?
4.只想在Drupal某个函数调用或控制其他数据库,但是失败了?
请认真看看后面的介绍,并如何解决你的问题。
一、Drupal如何连接到多个数据库?
允许Drupal连接多个数据库,需要转换$db_url为数组。
默认连接单个数据库的URL格式(字符串):
 
 
复制代码 代码如下:$db_url = 'mysql://username:password@localhost/databasename'; 
$db_url = 'mysqli://username:password@localhost/databasename'; 
$db_url = 'pgsql://username:password@localhost/databasename';
 
支持多个数据库的URL格式(数组):
 
 代码如下:$db_url['default'] = 'mysql://drupal:drupal@localhost/drupal'; 
$db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb'; 
$db_url['db3'] = 'mysql://user:pwd@localhost/yetanotherdb';
 
当查询一个不同的数据库时,简单地将数据库通过$db_url的引用键设置为当前活动的数据库,即可使用。
 
代码如下:<?php 
db_set_active('mydb'); 
db_query('SELECT * FROM table_in_anotherdb'); 
// 当数据获取完成后,切换回默认的数据库连接。 
db_set_active('default'); 
?>
 
这是Drupal的数据库操作的基本操作。
 
二、Drupal连接到多个数据库后,但是发现程序报错,这是怎么了?
 
链接到多个数据库时出现报错,主要可能以下原因:
 
1.连接到其他数据库时,SQL出错了,这个是人为的代码错误;
2.连接数据库时交叉了,所以在其他数据库里找不到数据表,即使SQL正确,也要报错;
 
解决方法:
针对第一种情况,请根据SQL报错,来修改SQL语句,就解决了。
第二种情况,请检查数据库连接是否交叉了,意思就是本来想调用另外数据库的数据表,但是数据库连接已经换到其他地方了。关于数据库连接交叉,请仔细检查db_set_active这个函数之后的SQL语句,是否在active数据库里。
 
三、Drupal获取、添加、修改、删除多个数据库时,没有正常工作?
 
1、在Drupal中SQL语句可以不带数据表的前缀,只需要用大括号{}包含table就可以在数据库操作时加上数据表的前缀。
例如:db_query('SELECT * FROM {table_in_anotherdb}');
但是一个数据库用户,如果拥有多个数据库的权限时,可以不用在$db_url设置连接到数据库,直接在当前数据库连接上操作就行了。
设置$db_prefix来实现跨数据库操作:
 
 代码如下:
$db_prefix = array( 
    'default' => ”, 
    'authmap' => 'z_', 
    'profile_fields' => 'usertable.z_', 
    'profile_values' => 'usertable.z_', 
    'users_roles' => 'usertable.z_', 
    'users_fields' => 'usertable.', 
    'role' => 'usertable.z_', 
    'sessions' => 'usertable.z_', 
    'users' => 'usertable.z_', 
);
 
 
上面的代码作用时,当前Drupal的用户等信息全部使用usertable,这样多个Drupal就可以共用一个用户信息数据库usertable,其中z_代表数据表的前缀。
 
注意:
 
a).users表用于存在Drupal用户的基本信息,可以存储所有用户共用的UID及其基本字段;
b).sessions表用于存放Drupal用户Sessions,可以统计所有站点的在线用户量;
c).role表用于存放所有Drupal站的角色;
d).users_roles存放所有Drupal站的权限;
通过上面的$db_prefix可以全局设置使用那个表要用到那个数据库,以及那个表的前缀,这个只是方便在Drupal的SQL语句中使用标准的{table}。
 
2、如果不通过$db_prefix来设置,那么最直白的方法就是直接把数据库 表名在SQL语句中。
 
例如:
 
代码如下:
db_query("SELECT uid FROM test.z_table1 WHERE name = '%s' and pass = '%s'", $name, md5($pass));
 
 
上面的SQL语句直接定位到test数据库,z_table数据表。
所以当你遇到Drupal获取、添加、修改、删除多个数据库时,数据没有正确的写入数据库或者读取到空的数据,请明确你所控制的数据库、数据表位置是否正确。
 
 
四、在Drupal某个函数调用或控制其他数据库
 
请看下面的function框架代码:
 
代码如下:
function test_fuc() { 
  global $db_url; //获取全局变量 
  $db_url['db_logs'] = 'mysqli://username:password@localhost/databasename'; 
  db_set_active('db_logs'); 
  $codehere; // 此处放置操作db_logs数据库连接的SQL 
  db_set_active('default'); 
}
 
特别要主要,$db_url是全局变量,需要在局部函数中用global引用:
复制代码 代码如下:global $db_url; //获取全局变量
设置完数据库后,记得使用db_set_active('default');,设置数据库连接恢复到默认。

时间: 2024-10-29 18:14:59

Drupal7连接多个数据库及常见问题解决的相关文章

Drupal7连接多个数据库及常见问题解决_php实例

如果你遇到这些问题:1.Drupal如何连接到多个数据库?2.Drupal连接到多个数据库后,但是发现程序报错,这是怎么了?3.Drupal获取.添加.修改.删除多个数据库时,数据没有正确的写入数据库或者读取到空的数据,怎么解决?4.只想在Drupal某个函数调用或控制其他数据库,但是失败了?请认真看看后面的介绍,并如何解决你的问题.一.Drupal如何连接到多个数据库?允许Drupal连接多个数据库,需要转换$db_url为数组.默认连接单个数据库的URL格式(字符串): 复制代码 代码如下:

PHP使用PDO操作数据库的乱码问题解决方法_php技巧

本文实例讲述了PHP使用PDO操作数据库的乱码问题解决方法.分享给大家供大家参考,具体如下: 当使用 PDO 连接操作数据库的时候,有时会出现:保存在数据库中的汉字为乱码.以文件为 UTF-8 格式,其解决方法如下: (1)实例化的对象直接执行 query() 方法或者 exec() 方法: <?php class DB { static public function getDB() { try { $_opts_values = array(PDO::ATTR_PERSISTENT=>tr

路由器常见问题解决办法

  路由器常见问题解决办法: 打开路由优化大师,进入高级设置页面,上网设置中检视帐号密码是否输入有误.这里的上网帐号不需要输入@163.gd之类的后缀,密码重新输入一遍. 一般的网络只需要设置正确的上网帐号和密码即可正常拨号上网,但也有部分地区网络运营商会对用户做单一限制,只允许同时段一个用户上线.可以在能正常宽带拨号上网的电脑上使用路由优化大师,进入高级设置页面,Mac地址克隆中选中克隆为当前电脑MAC地址后保存设置,重启路由器生效. 当一个路由器满足不了过多上网设备时,可以增加路由器来增加可

asp.net session、登录用户、cookie常见问题解决办法

asp教程.net session.登录用户.cookie常见问题解决办法 这里主要讲了关于session缓存,失效,以及cookie无法删除等常用见的问题了. OutPutCache 自定义缓存:session.登录用户.cookie 等 其实这个也是新瓶装旧酒的问题,前段时间,把这个做了,况且效果和性能都还不错,所以记录下,希望能帮助更多的人 虽然 outputcache 很重要,但是这个功能真的不好用,很多时间不能满足需求,比如做一些自定义方面的缓存依赖,如:session.登录用户信息.

Oracle数据库TNS常见错误的解决方法汇总_oracle

TNS是Oracle Net的一部分,是专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,就必须配置TNS.本文主要讲述了Oracle数据库TNS常见错误的解决方法如下: 1.ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏.若是前者,使用命令net start OracleOraHome10gTNSListener(名字可能有出入)即可;如果是后者,则使用"Net Configuration Assistant"

sharepoint server2010 配置向导异常 ,未能连接到配置数据库 管理 帖子编辑

问题描述 我在windows2008r2搭建了一个sharepoint2012服务器,部署了一个服务器场,域控制都设置好了,数据库也是2008R2配置,在本地用的是win7系统,加入了服务域控制,可以连接上服务器上的数据库,但是我在本地安装sharepoint2010成功后部署,设置好了服务器场和配置数据库,但是在执行配置完成的第三部就报错了,出了异常,说是未能连接到配置数据库.我在本地可以远程服务器数据库.服务器环境部署没有问题,装的是sql2008R2数据库,本地数据库引擎正常远程连接访问服

web service 服务端如何跟据客户端提交的参数,连接不同的数据库

问题描述 webservice服务端如何跟据客户端提交的参数,连接不同的数据库如:客户端A传了一个值a_sql给webservice服务,服务端跟据传入的参数连接数据库a_sql客户端B传了一个值B_sql给webservice服务,服务端跟据传入的参数连接数据库b_sql 解决方案 解决方案二:这类问题无法真的好好回答啊.你想想看.解决方案三:服务端要干什么,依赖的是输入输出协议.不纠结什么"客户端A.客户端B".在一个客户端要访问服务器之前,它通常会"注册",来

.net MVC 连接数据本地数据库三种方法总结_实用技巧

.net MVC 连接数据本地数据库三种方法 <appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" />

快速掌握ASP连接11种数据库的常用语法

本文主要介绍了ASP连接11种数据库的常用语法,详细内容请参考下文: 1.Access数据库的DSN-less连接方法: 以下为引用的内容:set adocon=Server.Createobject("adodb.connection")adoconn.Open"Driver={Microsoft Access Driver(*.mdb)};DBQ="& _Server.MapPath("数据库所在路径") 2.Access OLE D