Использование wpdb для подключения к отдельной базе данных

Я хочу подключить wpdb к другой базе данных. Как создать экземпляр и передать ему имя базы данных /имя пользователя /пароль?

Спасибо

70 голосов | спросил Wadih M. 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 10 Sep 2010 06:31:00 +0400 2010, 06:31:00

6 ответов


117

Да, это возможно.

Объект 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>";
ответил Wadih M. 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 10 Sep 2010 16:48:08 +0400 2010, 16:48:08
26

В WordPress легко подключиться ко второй базе данных, вы просто создаете новый экземпляр класса WPDB и используете его так же, как и стандартный экземпляр $ wpdb, который все мы знаем и любим.

Предполагая, что вторая база данных имеет ту же самую регистрационную информацию, что и основной WP, вы даже можете использовать предопределенные константы из wp-config.php, чтобы избежать жесткого кодирования информации для входа.

/**
 * Мгновенный запуск класса wpdb для подключения к вашей второй базе данных, $ database_name
 * /
$ second_db = новый wpdb (DB_USER, DB_PASSWORD, $ database_name, DB_HOST);
/**
 * Использовать новый объект базы данных так же, как вы бы использовали $ wpdb
 * /
$ results = $ second_db-> get_results ($ your_query);
ответил jerclarke 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 12 Sep 2010 00:53:01 +0400 2010, 00:53:01
20

Никто не сказал этого, поэтому я думал, что добавлю еще более простой способ.

до тех пор, пока ваша дополнительная база данных будет иметь одинаковую информацию о пользователе /​​пароле, чтобы получить к ней доступ в качестве базы данных Wordpress, вы можете использовать имя базы данных до имени таблицы, подобного этой

$ query = $ wpdb-> prepare ('SELECT * FROM dbname.dbtable WHERE 1');
$ result = $ wpdb-> get_results ($ query);
ответил CommentLuv 29 WedEurope/Moscow2010-12-29T17:27:16+03:00Europe/Moscow12bEurope/MoscowWed, 29 Dec 2010 17:27:16 +0300 2010, 17:27:16
5

Пока они будут работать, вы потеряете возможность использовать «другие» пользовательские функции, такие как запросы get_post_custom и wordpress. Простым решением является

$ wpdb- > выберите ( 'database_name');

, который изменяет базу данных по всей системе (mysql select_db). Метод database.table работает, если вы просто хотите сделать простой запрос, но если вы хотите получить доступ к другому блогу Wordpress, вы можете использовать select. Вам просто нужно будет изменить его, когда закончите, или ваш блог может делать странные вещи.

ответил 8 PMpFri, 08 Apr 2011 16:02:04 +040002Friday 2011, 16:02:04
5

Я еще не могу прокомментировать, но я хотел расширить ответ Вадима М. (что здорово).

Класс базы данных WP - это настраиваемая версия ezSQL Justin Vincent. Если вам нравится интерфейс, и вы хотите сделать сайт, не основанный на WordPress, вы можете проверить его: http://justinvincent.com/ezsql

ответил gabrielk 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 10 Sep 2010 20:38:36 +0400 2010, 20:38:36
4

Я боролся с использованием $ wpdb для подключения ко второй базе данных блогов с родительского сайта, которому необходимо обновить два блогов. Я использовал $ wpdb-> select ($ dbname, $ dbh), чтобы выбрать вторую базу данных, но я все еще получал результаты от первой базы данных.

Я решил проблему, вызвав wp_cache_flush (), чтобы очистить кэш WordPress до вызова функций WP во второй базе данных.

ответил Matt 22 PMpFri, 22 Apr 2011 23:13:59 +040013Friday 2011, 23:13:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132