Я хочу подключиться wpdb
к другой базе данных. Как мне создать экземпляр и передать ему имя базы данных / имя пользователя / пароль?
Спасибо
Я хочу подключиться wpdb
к другой базе данных. Как мне создать экземпляр и передать ему имя базы данных / имя пользователя / пароль?
Спасибо
Ответы:
Да, это возможно.
Объект 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_');
никто не сказал этого, поэтому я подумал, что я бы добавил еще более простой способ ..
до тех пор, пока ваша дополнительная база данных имеет те же данные о пользователе / пароле для доступа к ней, что и ваша база данных WordPress, вы можете использовать имя базы данных перед именем таблицы, как это
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Вы не можете вставить данные.
Хотя они будут работать, вы потеряете возможность использовать «другие» пользовательские функции, такие как запросы 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
базой данных. Есть идеи?
Я пока не могу комментировать, но я хотел бы расширить ответ Вади М. (это здорово).
Класс базы данных WP является настроенной версией ezSQL Джастина Винсента. Если вам нравится интерфейс и вы хотите создать сайт, не основанный на WordPress, вы можете проверить его: http://justinvincent.com/ezsql
Я боролся с использованием $wpdb
для подключения ко второй базе данных блогов с родительского сайта, который должен обновить два блога. Я использовал $wpdb->select($dbname, $dbh)
для выбора второй базы данных, но я все еще получал результаты из первой базы данных.
Я решил проблему, вызвав wp_cache_flush()
очистку кеша WordPress перед вызовом функций WP во второй базе данных.