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