天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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');,設置數據庫連接恢復到默認。

php技術Drupal7連接多個數據庫及常見問題解決,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 99国内精品 | 武侠艳妇屈辱的张开双腿 | 亚洲国产精品免费线观看视频 | 污文乖不疼的 | 国产一卡 二卡三卡四卡无卡乱码视频 | 亚洲免费三级电影 | 国产午夜精品美女免费大片 | 99在线观看视频免费 | 麻豆免费观看高清完整视频在线 | 亚洲爆乳少妇精品无码专区 | YY600800新视觉理论私人 | 少妇的肉体AA片免费 | 亚洲欧美免费无码专区 | 免费果冻传媒在线完整观看 | 最新无码国产在线视频 | 精品国产5g影院天天爽 | 欧美xxxxx九色视频免费观看 | china18一19 第一次 | 99视频国产在线 | 美女岔开腿露出粉嫩花苞 | 久久热精品18国产 | 欧美另类老女人 | 免费精品美女久久久久久久久久 | 俄罗斯人与动ZOOZ | 91avcom | 色偷偷超碰97人人澡人人 | 亚洲国产精品嫩草影院久久 | 永久免费的无码中文字幕 | 国际老妇高清在线观看 | 成人午夜精品无码区久久漫画日本 | 日本视频中文字幕一区二区 | 高清观看ZSHH96的视频素材 | 欧美激情视频一区 | 99精品视频在线免费观看 | 撕开美女的衣服2 | 老熟人老女人国产老太 | 欧美色图一区二区三区 | 国产精品2020观看久久 | 囚禁固定在调教椅上扩张H 秋霞最新高清无码鲁丝片 秋霞在线看片无码免费 | 日本无修肉动漫在线观看 | 亚洲成人mv|