Я хочу подключиться wpdb
к другой базе данных. Как создать экземпляр и передать ему имя базы данных/имя пользователя/пароль?
Спасибо
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Другая база данных MySQL или другой тип базы данных? Вам по-прежнему нужен доступ к обычной базе данных WordPress или вы перемещаете сайт из одной БД в другую?
Да, еще одна база данных MySQL. Это отдельная БД на том же сервере, а не WordPress. Это пользовательская БД с информацией, которую я хочу отображать внутри WordPress.
Если бы вы сделали это с объектом $wpdb, если бы это было вообще возможно, это отключило бы остальную часть WordPress от его существующей базы данных. Итак, не рекомендуется. Другой вариант — создать новый экземпляр с помощью EZSQL, который используется WordPress. Я думаю, что EZSQL используется, потому что это слой, который абстрагирует вас от необходимости использовать php-pdo-mysql, php-mysql или php-mysqli, не зная, какой из них может быть установлен на данном сервере.
Да, это возможно. Можно создать экземпляр wpdb для доступа к любой базе данных и выполнения запросов к любой таблице.
Буя. Жаль, что все эти комментарии добавлены к самому вопросу, чтобы заблокировать ваш точный ответ.
@ Джереми Кларк: я согласен. Надеемся, что наши коллеги по вордпрессу будут более осторожны, чтобы не распространять невинную дезинформацию.
Вы также можете сэкономить время, используя
global $wpdb
. Но перед запуском метода $wpdb->get_results вы должны включить wp-load.php как:require_once('/your/wordpress/wp-load.php');
Установите префикс WPDB, чтобы WP_Query и get_post генерировали правильный SQL-запрос, вызывая
$mydb->set_prefix('wp_');
Я знаю, что это старый поток, но я не могу не чувствовать, что сжатие
$mydb
переменной с новым объектом может оставить соединение открытым (я могу ошибаться). Я бы проверил, создан ли$mydb
уже экземпляр из предыдущего вызова, и если да, закройте соединение перед запуском нового экземпляра. например (извините, я не могу сделать аккуратные блоки кода Markdown в комментариях):if ($mydb != null) { $mydb->close(); }
Это несколько избыточно для ответа Вади, но я думаю, что мой пример кода немного понятнее, и также важно помнить константы входа в базу данных, поскольку они почти всегда являются правильными для использования, и в противном случае вы рискуете проблемами при переходе от dev- > stage- > живые среды, в которых данные для входа могут измениться.
Установите префикс WPDB, чтобы WP_Query и get_post генерировали правильный SQL-запрос, вызывая
$second_db->set_prefix('wp_');
По моему опыту, это работает только для получения данных, т.е. с использованием
SELECT
. Вы не можете вставить данные.это не будет работать внешне,
Я использую это решение, и оно отлично работает, за исключением одного. По какой-то неизвестной причине
wp_get_post_terms()
, кажется, не использует вновь выбранную БД?? Любая другая функция, которую я пробовал (напримерget_post_meta()
, иget_posts()
т. д.), работает нормально, ноwp_get_post_terms()
, похоже, работает сDB_NAME
базой данных. Есть идеи?Меня очень разочаровал ezSQL, исходящий от WPDB. Никаких операторов «подготовить», никаких «вставить» или «обновить»… Мне нравится использовать весь класс WPDB в том виде, в котором он существует, что возможно, если включить в свой проект пару файлов из BackPress.
@gabrielk Ссылка мертва — новая: [1] [1]: justinvincent.com/ezsql
Да, это возможно.
Объект wpdb можно использовать для доступа к любой базе данных и запросов к любой таблице. Абсолютно не обязательно иметь отношение к WordPress, что очень интересно.
Преимущество заключается в возможности использовать все классы и функции wpdb
get_results
, такие как и т. д., так что нет необходимости изобретать велосипед.Вот как:
Подключиться ко второй базе данных в WordPress очень просто: вы просто создаете новый экземпляр класса WPDB и используете его так же, как вы использовали бы стандартный экземпляр $wpdb, который мы все знаем и любим.
Предполагая, что вторая база данных имеет ту же информацию для входа в систему, что и основная WP, вы даже можете использовать предопределенные константы из wp-config.php, чтобы избежать жесткого кодирования информации для входа.
никто не сказал этого, поэтому я подумал, что добавлю еще более простой способ.
пока ваша дополнительная база данных имеет те же данные пользователя/пароля для доступа к ней, что и ваша база данных WordPress, вы можете использовать имя базы данных перед именем таблицы, как это
Хотя они будут работать, вы потеряете возможность использовать «другие» пользовательские функции, такие как запросы get_post_custom и wordpress. Простое решение
который изменяет базу данных в масштабе всей системы (mysql select_db). Метод database.table работает, если вы просто хотите сделать простой запрос, но если вы хотите получить доступ к другому блогу WordPress, вы можете использовать select. Вам просто нужно будет изменить его обратно, когда вы закончите, или ваш блог может делать странные вещи.
Я пока не могу комментировать, но я хотел расширить ответ Вади М. (и это здорово).
Класс базы данных WP — это адаптированная версия ezSQL Джастина Винсента. Если вам нравится интерфейс и вы хотите создать сайт, не основанный на WordPress, вы можете проверить его: http://justinvincent.com/ezsql
Я изо всех сил пытался использовать
$wpdb
для подключения ко второй базе данных блогов с родительского сайта, которому необходимо обновить два блога. Раньше я$wpdb->select($dbname, $dbh)
выбирал вторую базу данных, но все еще получал результаты из первой базы данных.Я решил проблему, позвонив
wp_cache_flush()
для очистки кеша WordPress перед вызовом функций WP во второй базе данных.