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