您当前的位置: 首页 > 网站编程 > PHP教程 > Drupal7连接多个数据库及常见问题解决

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

作者:不详 来源:网络 发布时间: 2014-08-05 21:42 点击:
这篇文章主要介绍了Drupal7连接多个数据库的方法、操作实例,以及常见问题解决方法,需要的朋友可以参考下 如果你遇到这些问题: 1.Drupal如何连接到多个数据库? 2.Drupal连接到多个数据库后,但是发现程序报错,这是怎么了? 3.Drupal获娶添加、修改、删除多个数据库时

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');,设置数据库连接恢复到默认。
分享到:
本文"Drupal7连接多个数据库及常见问题解决"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4