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


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

Спасибо

Author: Wadih M., 2010-09-10

6 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>";
 154
Author: Wadih M., 2010-09-10 13:00:53

Подключение ко второй базе данных в 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);
 32
Author: jerclarke, 2010-09-11 20:53:01

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

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

$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
 23
Author: CommentLuv, 2010-12-29 14:27:16

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

$wpdb->select('database_name');

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

 10
Author: kaiser, 2014-04-08 17:57:28

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

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

 7
Author: gabrielk, 2017-11-08 16:44:59

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

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

 4
Author: Matt, 2012-11-24 05:24:38