Drupal7連接多個數(shù)據(jù)庫及常見問題解決
如果你遇到這些問題:
1.Drupal如何連接到多個數(shù)據(jù)庫?
2.Drupal連接到多個數(shù)據(jù)庫后,但是發(fā)現(xiàn)程序報錯,這是怎么了?
3.Drupal獲取、添加、修改、刪除多個數(shù)據(jù)庫時,數(shù)據(jù)沒有正確的寫入數(shù)據(jù)庫或者讀取到空的數(shù)據(jù),怎么解決?
4.只想在Drupal某個函數(shù)調(diào)用或控制其他數(shù)據(jù)庫,但是失敗了?
請認(rèn)真看看后面的介紹,并如何解決你的問題。
一、Drupal如何連接到多個數(shù)據(jù)庫?
允許Drupal連接多個數(shù)據(jù)庫,需要轉(zhuǎn)換$db_url為數(shù)組。
默認(rèn)連接單個數(shù)據(jù)庫的URL格式(字符串):
$db_url = 'mysqli://username:password@localhost/databasename';
$db_url = 'pgsql://username:password@localhost/databasename';
支持多個數(shù)據(jù)庫的URL格式(數(shù)組):
$db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb';
$db_url['db3'] = 'mysql://user:pwd@localhost/yetanotherdb';
當(dāng)查詢一個不同的數(shù)據(jù)庫時,簡單地將數(shù)據(jù)庫通過$db_url的引用鍵設(shè)置為當(dāng)前活動的數(shù)據(jù)庫,即可使用。
db_set_active('mydb');
db_query('SELECT * FROM table_in_anotherdb');
// 當(dāng)數(shù)據(jù)獲取完成后,切換回默認(rèn)的數(shù)據(jù)庫連接。
db_set_active('default');
?>
這是Drupal的數(shù)據(jù)庫操作的基本操作。
二、Drupal連接到多個數(shù)據(jù)庫后,但是發(fā)現(xiàn)程序報錯,這是怎么了?
鏈接到多個數(shù)據(jù)庫時出現(xiàn)報錯,主要可能以下原因:
1.連接到其他數(shù)據(jù)庫時,SQL出錯了,這個是人為的代碼錯誤;
2.連接數(shù)據(jù)庫時交叉了,所以在其他數(shù)據(jù)庫里找不到數(shù)據(jù)表,即使SQL正確,也要報錯;
解決方法:
針對第一種情況,請根據(jù)SQL報錯,來修改SQL語句,就解決了。
第二種情況,請檢查數(shù)據(jù)庫連接是否交叉了,意思就是本來想調(diào)用另外數(shù)據(jù)庫的數(shù)據(jù)表,但是數(shù)據(jù)庫連接已經(jīng)換到其他地方了。關(guān)于數(shù)據(jù)庫連接交叉,請仔細(xì)檢查db_set_active這個函數(shù)之后的SQL語句,是否在active數(shù)據(jù)庫里。
三、Drupal獲取、添加、修改、刪除多個數(shù)據(jù)庫時,沒有正常工作?
1、在Drupal中SQL語句可以不帶數(shù)據(jù)表的前綴,只需要用大括號{}包含table就可以在數(shù)據(jù)庫操作時加上數(shù)據(jù)表的前綴。
例如:db_query('SELECT * FROM {table_in_anotherdb}');
但是一個數(shù)據(jù)庫用戶,如果擁有多個數(shù)據(jù)庫的權(quán)限時,可以不用在$db_url設(shè)置連接到數(shù)據(jù)庫,直接在當(dāng)前數(shù)據(jù)庫連接上操作就行了。
設(shè)置$db_prefix來實(shí)現(xiàn)跨數(shù)據(jù)庫操作:
$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_',
);
上面的代碼作用時,當(dāng)前Drupal的用戶等信息全部使用usertable,這樣多個Drupal就可以共用一個用戶信息數(shù)據(jù)庫usertable,其中z_代表數(shù)據(jù)表的前綴。
注意:
a).users表用于存在Drupal用戶的基本信息,可以存儲所有用戶共用的UID及其基本字段;
b).sessions表用于存放Drupal用戶Sessions,可以統(tǒng)計所有站點(diǎn)的在線用戶量;
c).role表用于存放所有Drupal站的角色;
d).users_roles存放所有Drupal站的權(quán)限;
通過上面的$db_prefix可以全局設(shè)置使用那個表要用到那個數(shù)據(jù)庫,以及那個表的前綴,這個只是方便在Drupal的SQL語句中使用標(biāo)準(zhǔn)的{table}。
2、如果不通過$db_prefix來設(shè)置,那么最直白的方法就是直接把數(shù)據(jù)庫 表名在SQL語句中。
例如:
db_query("SELECT uid FROM test.z_table1 WHERE name = '%s' and pass = '%s'", $name, md5($pass));
上面的SQL語句直接定位到test數(shù)據(jù)庫,z_table數(shù)據(jù)表。
所以當(dāng)你遇到Drupal獲取、添加、修改、刪除多個數(shù)據(jù)庫時,數(shù)據(jù)沒有正確的寫入數(shù)據(jù)庫或者讀取到空的數(shù)據(jù),請明確你所控制的數(shù)據(jù)庫、數(shù)據(jù)表位置是否正確。
四、在Drupal某個函數(shù)調(diào)用或控制其他數(shù)據(jù)庫
請看下面的function框架代碼:
function test_fuc() {
global $db_url; //獲取全局變量
$db_url['db_logs'] = 'mysqli://username:password@localhost/databasename';
db_set_active('db_logs');
$codehere; // 此處放置操作db_logs數(shù)據(jù)庫連接的SQL
db_set_active('default');
}
特別要主要,$db_url是全局變量,需要在局部函數(shù)中用global引用:
設(shè)置完數(shù)據(jù)庫后,記得使用db_set_active('default');,設(shè)置數(shù)據(jù)庫連接恢復(fù)到默認(rèn)。
- js讀取被點(diǎn)擊次數(shù)的簡單實(shí)例(從數(shù)據(jù)庫中讀取)
- sql server 2008數(shù)據(jù)庫連接字符串大全
- 上傳圖片后使用數(shù)據(jù)庫保存圖片的示例分享
- openfiledialog讀取txt寫入數(shù)據(jù)庫示例
- sql2000數(shù)據(jù)庫清除重復(fù)數(shù)據(jù)的二種方法
- linux數(shù)據(jù)庫備份并通過ftp上傳腳本分享
- java使用jdbc操作數(shù)據(jù)庫示例分享
- MySQL數(shù)據(jù)庫命名規(guī)范及約定
- net操作access數(shù)據(jù)庫示例分享
- mysql跨數(shù)據(jù)庫復(fù)制表(在同一IP地址中)示例
- Drupal讀取Excel并導(dǎo)入數(shù)據(jù)庫實(shí)例
- sqlserver備份還原數(shù)據(jù)庫功能封裝分享
- Drupal7中常用的數(shù)據(jù)庫操作實(shí)例
- android通過jxl讀excel存入sqlite3數(shù)據(jù)庫
- java自定義動態(tài)鏈接數(shù)據(jù)庫示例
- php把session寫入數(shù)據(jù)庫示例
- 在linux中導(dǎo)入sql文件的方法分享(使用命令行轉(zhuǎn)移mysql數(shù)據(jù)庫)
- 四種數(shù)據(jù)庫隨機(jī)獲取10條數(shù)據(jù)的方法
相關(guān)文章
php版微信公眾平臺入門教程之開發(fā)者認(rèn)證的方法
這篇文章主要介紹了php版微信公眾平臺入門教程之開發(fā)者認(rèn)證的方法,結(jié)合實(shí)例形式分析了php版微信公眾平臺開發(fā)者認(rèn)證的步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-09-09laravel框架創(chuàng)建授權(quán)策略實(shí)例分析
這篇文章主要介紹了laravel框架創(chuàng)建授權(quán)策略,結(jié)合實(shí)例形式分析了laravel框架創(chuàng)建授權(quán)策略的相關(guān)步驟、實(shí)現(xiàn)方法與操作注意事項,需要的朋友可以參考下2019-11-11Laravel5.1 框架數(shù)據(jù)庫操作DB運(yùn)行原生SQL的方法分析
這篇文章主要介紹了Laravel5.1 框架數(shù)據(jù)庫操作DB運(yùn)行原生SQL的方法,結(jié)合實(shí)例形式分析了laravel5.1使用DB運(yùn)行原生SQL的相關(guān)操作技巧與注意事項,需要的朋友可以參考下2020-01-01CodeIgniter配置之config.php用法實(shí)例分析
這篇文章主要介紹了CodeIgniter配置之config.php用法,結(jié)合實(shí)例形式詳細(xì)的分析了CodeIgniter中配置文件config.php的參數(shù)含義及具體使用技巧,需要的朋友可以參考下2016-01-01