由于3.9版(即将发布,实际上是beta 2版)WordPress将使用mysqli连接到数据库(3.9版-使用mysql),所以您可以使用新的wpdb实例和帮助函数连接WordPress的externa值。
我建议使用中的常量配置外部数据库wp-config.php
通过这种方式,您可以确定WordPress中有可用的配置:您必须复制配置,但我认为这不是一个真正的问题。
所以在wp-config.php
, 在生产线之前
/* That\'s all, stop editing! Happy blogging. */
在常量中写入外部db配置:
define( \'MY_EXT_DB_HOST\', \'xxx.xxx.xxx.xxx\' );
define( \'MY_EXT_DB_USER\', \'my-dummy-user\' );
define( \'MY_EXT_DB_PWD\', \'my-dummy-password\' );
define( \'MY_EXT_DB_NAME\', \'my-dummy-db-name\' );
define( \'MY_EXT_DB_PREFIX\', \'mydummyprefix_\' );
之后,在函数中。php编写一个初始化并返回新wpdb实例的函数
function get_my_extenal_db() {
static $myextdb;
if ( is_null( $myextdb ) ) {
// new wpdb instance
$myextdb = new wpdb( MY_EXT_DB_USER, MY_EXT_DB_PWD, MY_EXT_DB_NAME, MY_EXT_DB_HOST );
// set prefix
$myextdb->set_prefix( MY_EXT_DB_PREFIX, FALSE );
// set table names:
// 1. add all unprefixed table names to an array
$tables = array( \'users\', \'profile_fields_data\', \'user_group\' );
// 2. replace standard tables
$myextdb->tables = $tables;
$myextdb->global_tables = array();
$myextdb->ms_global_tables = array();
// 3. set your tables
foreach ( $tables as $table ) {
$myextdb->$table = MY_EXT_DB_PREFIX . $table;
}
// optional, set DB collate and chartset
$myextdb->collate = \'utf8_general_ci\';
$myextdb->charset = \'utf8\';
}
return $myextdb;
}
现在,您可以在中使用外部db了
WordPress way.
// get db instance
$mydb = get_my_extenal_db();
// prepare query
$query = $mydb->prepare(
"SELECT * FROM {$mydb->users} u
LEFT JOIN {$mydb->profile_fields_data} f ON (u.user_id = f.user_id)
LEFT JOIN {$mydb->user_group} g ON (u.user_id = g.user_id)
WHERE g.group_id = %d", 9
);
// get results
$results = $mydb->get_results( $query );
之后,您可以只使用检索到的数据。默认情况下
wpdb::get_results()
返回对象数组,其中每一行都是一个对象,其属性是行列的值:
// do stuff with data
if ( ! empty( $results ) ) {
foreach ( $results as $row ) {
if( $row->pf_xml_arma_id != "" ){
$data .= \'<member id="\' . $row->pf_xml_arma_id;
$data .= \'" nick="\' . $row->pf_xml_player_name . \'">\';
$name = $row->pf_xml_name === \'\' ? "N/A" : $row->pf_xml_name;
$email = $row->pf_xml_email === \'\' ? "N/A" : $row->pf_xml_email;
$steam = $row->pf_xml_steam_user === \'\'
? "N/A"
: "Steam: {$row->pf_xml_steam_user}";
$quote = $row->pf_xml_remark === \'\' ? "N/A" : $row->pf_xml_remark;
$data .= "<name>{$name}</name>";
$data .= "<email>{$email}</email>";
$data .= "<icq>{$steam}</icq>";
$data .= "<remark>{$quote}</remark>";
$data .= "</member>";
}
}
}
如果需要在不同的时间查询数据库,只需调用
$mydb = get_my_extenal_db()
每次需要时:连接将完成并只设置一次。
您可以在3.9之前的WordPress版本中使用此代码,当您更新到3.9时,它将不需要任何干预即可工作。但在3.9中,它将使用mysqli
, 在以前的版本中mysql
(这将导致使用PHP 5.5+发出不推荐的通知。