首页 > 开发 > PHP > 正文

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

2024-05-04 22:22:17
字体:
来源:转载
供稿:网友

如果你遇到这些问题:
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_',

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表