問題描述

我想將 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。