問題描述
我想將 wpdb 連線到另一個資料庫。如何建立例項並傳遞資料庫名稱/使用者名稱/密碼?
謝謝
最佳解決方案
是的,這是可能的。
wpdb 物件可用於訪問任何資料庫並查詢任何表。絕對不需要與 Wordpress 相關,這是非常有趣的。
其優點是可以使用所有的 wpdb 類和函式,如 get_results 等,這樣就不需要 re-invent 了。
就是這樣:
$mydb = new wpdb('username','password','database','localhost');
$rows = $mydb->get_results("select Name from my_table");
echo "<ul>";
foreach ($rows as $obj) :
echo "<li>".$obj->Name."</li>";
endforeach;
echo "</ul>";
次佳解決方案
在 WordPress 中連線到第二個資料庫很簡單,您只需建立一個 WPDB 類的新例項,並使用它與使用我們都知道和喜歡的標準 $ wpdb 例項相同的方式。
假設第二個資料庫具有與主 WP 相同的登入資訊,您甚至可以使用 wp-config.php 中的預定義常量來避免登入資訊的硬編碼。
/**
* Instantiate the wpdb class to connect to your second database, $database_name
*/
$second_db = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_HOST);
/**
* Use the new database object just like you would use $wpdb
*/
$results = $second_db->get_results($your_query);
第三種解決方案
沒有人說過這個,所以我以為我會新增一個更簡單的方法..
只要您的附加資料庫具有相同的使用者/傳遞詳細資訊來訪問它作為您的 WordPress 資料庫,您可以使用資料庫名稱之前的表名稱像這樣
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
第四種方案
我還沒有評論,但是我想擴大 Wadih M. 的答案 (這是很棒的) 。
WP 的資料庫類是 Justin Vincent 的 ezSQL 的定製版本。如果您喜歡該介面,並且您想要做一個不是 WordPress-based 的站點,您可能需要檢視:http://www.woyano.com/jv/ezsql
第五種方案
儘管這些功能會起作用,但您將無法使用”other” 自定義功能 (如 get_post_custom 和 wordpress 查詢) 。簡單的解決方案是
$wpdb->select('database_name');
它改變了資料庫 system-wide(一個 mysql select_db) 。如果您只想簡單的查詢,那麼 database.table 方法是有效的,但是如果您想訪問另一個 wordpress 部落格,可以使用 select 。完成後,您只需要將其更改,或者您的部落格可能會發生奇怪的事情。
第六種方案
我正在努力使用 $wpdb 連線到需要更新兩個部落格的父站點的第二個部落格資料庫。我使用 $wpdb->select($dbname, $dbh)選擇第二個資料庫,但是我仍然從第一個資料庫獲取結果。
我透過呼叫 wp_cache_flush()在第二個資料庫上呼叫 WP 函式之前清除 WordPress 快取來解決問題。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。