我想连接wpdb
到另一个数据库。如何创建实例并将其传递给数据库名称/用户名/密码?
谢谢
我想连接wpdb
到另一个数据库。如何创建实例并将其传递给数据库名称/用户名/密码?
谢谢
Answers:
是的,有可能。
wpdb对象可用于访问任何数据库和查询任何表。完全不需要与Wordpress相关,这非常有趣。
好处是可以使用所有wpdb类和函数,例如get_results
等等,因此无需重新发明轮子。
这是如何做:
$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>";
global $wpdb
。但是在触发$ wpdb-> get_results方法之前,您必须包括wp-load.php作为: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
在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);
$second_db->set_prefix('wp_');
尽管这些将起作用,但是您将失去使用“其他”自定义功能(如get_post_custom和wordpress查询)的能力。简单的解决方案是
$wpdb->select('database_name');
这将更改系统范围内的数据库(一个mysql select_db)。如果只想进行简单查询,则database.table方法有效,但如果要访问另一个wordpress博客,则可以使用select。完成后,您只需要将其更改回去,否则您的博客可能会做一些奇怪的事情。
wp_get_post_terms()
,似乎没有使用新选择的数据库?我尝试过的所有其他函数(例如get_post_meta()
,get_posts()
等)似乎都可以正常工作,但wp_get_post_terms()
似乎可以用于DB_NAME
数据库。有任何想法吗?
我还不能发表评论,但是我想扩大Wadih M.的答案(很棒)。
WP的数据库类是Justin Vincent的ezSQL的自定义版本。如果您喜欢该界面,并且想要创建一个非基于WordPress的网站,则可能需要查看一下:http : //justinvincent.com/ezsql