问题描述

我想将 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。