Другая база данных MySQL или другой тип базы данных? Вам все еще нужен доступ к обычной базе данных WordPress, или вы перемещаете сайт из одной БД в другую?
EAMann
1
Да, еще одна база данных MySQL. Это отдельная БД на том же сервере, и это не Wordpress. Это пользовательский БД, с информацией, которую я хочу отображать в WordPress.
Вадих М.
1
Если бы вы сделали это с объектом $ wpdb, если бы это было возможно, он отключил бы остальную часть WordPress от существующей базы данных. Так что не рекомендуется. Другой вариант - создать новый экземпляр, используя EZSQL, который используется WordPress. Я думаю, что EZSQL используется, потому что это слой, который абстрагирует вас от необходимости использовать php-pdo-mysql, php-mysql или php-mysqli, не зная, что может быть установлено на данном сервере.
Volomike
3
Да, это возможно. Можно создать экземпляр wpdb для доступа к любой базе данных и запроса к любой таблице.
Вади М.
Ответы:
139
Да, это возможно.
Объект wpdb может использоваться для доступа к любой базе данных и запроса к любой таблице. Абсолютно не нужно быть связанным с Wordpress, что очень интересно.
Преимущество заключается в возможности использовать все классы и функции wpdb, например get_results, и т. Д., Чтобы не было необходимости заново изобретать колесо.
Вот как:
$mydb = new wpdb('username','password','database','localhost');$rows=$mydb->get_results("select Name from my_table");
echo "<ul>";
foreach ($rowsas$obj):
echo "<li>".$obj->Name."</li>";
endforeach;
echo "</ul>";
Booyah. Жаль, что все эти комментарии складывались в сам вопрос, чтобы заблокировать ваш точный ответ.
Джеркларк
@ Джереми Кларк: Я согласен. Надеясь, что наши коллеги по WordPress будут более осторожны, чтобы не распространять невинную дезинформацию.
Вади М.
1
Вы также можете сэкономить время с помощью global $wpdb. Но перед запуском метода $ wpdb-> get_results, вы должны включить wp-load.php как: require_once('/your/wordpress/wp-load.php');
Junior M
Установите префикс WPDB, чтобы WP_Query и get_post генерировали правильный sql-запрос, вызывая$mydb->set_prefix('wp_');
MR
30
В 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);
Это несколько избыточно для ответа Вадиха, но я думаю, что мой пример кода немного яснее, и также важно помнить константы входа в db, поскольку они почти всегда являются правильными для использования, в противном случае вы рискуете столкнуться с проблемами при переходе от dev-> stage- > живые среды, в которых данные для входа могут измениться.
Джеркларк
Установите префикс WPDB, чтобы WP_Query и get_post генерировали правильный sql-запрос, вызывая$second_db->set_prefix('wp_');
MR
21
никто не сказал этого, поэтому я подумал, что я бы добавил еще более простой способ ..
до тех пор, пока ваша дополнительная база данных имеет те же данные о пользователе / пароле для доступа к ней, что и ваша база данных WordPress, вы можете использовать имя базы данных перед именем таблицы, как это
$query =$wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');$result =$wpdb->get_results($query);
По моему опыту, это работает только для получения данных, то есть с использованием SELECT. Вы не можете вставить данные.
Один защитник
это не будет работать внешне,
Васим А.
7
Хотя они будут работать, вы потеряете возможность использовать «другие» пользовательские функции, такие как запросы 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базой данных. Есть идеи?
Powerbuoy
7
Я пока не могу комментировать, но я хотел бы расширить ответ Вади М. (это здорово).
Класс базы данных WP является настроенной версией ezSQL Джастина Винсента. Если вам нравится интерфейс и вы хотите создать сайт, не основанный на WordPress, вы можете проверить его: http://justinvincent.com/ezsql
ezSQL был очень расстроен для меня из WPDB. Нет операторов "prepare", нет "insert" или "update" ... Мне нравится использовать весь класс WPDB, как он существует, что возможно, если включить в ваш проект пару файлов из BackPress.
Я боролся с использованием $wpdbдля подключения ко второй базе данных блогов с родительского сайта, который должен обновить два блога. Я использовал $wpdb->select($dbname, $dbh)для выбора второй базы данных, но я все еще получал результаты из первой базы данных.
Я решил проблему, вызвав wp_cache_flush()очистку кеша WordPress перед вызовом функций WP во второй базе данных.
Ответы:
Да, это возможно.
Объект wpdb может использоваться для доступа к любой базе данных и запроса к любой таблице. Абсолютно не нужно быть связанным с Wordpress, что очень интересно.
Преимущество заключается в возможности использовать все классы и функции wpdb, например
get_results
, и т. Д., Чтобы не было необходимости заново изобретать колесо.Вот как:
источник
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, чтобы избежать жесткого кодирования информации для входа.
источник
$second_db->set_prefix('wp_');
никто не сказал этого, поэтому я подумал, что я бы добавил еще более простой способ ..
до тех пор, пока ваша дополнительная база данных имеет те же данные о пользователе / пароле для доступа к ней, что и ваша база данных WordPress, вы можете использовать имя базы данных перед именем таблицы, как это
источник
SELECT
. Вы не можете вставить данные.Хотя они будут работать, вы потеряете возможность использовать «другие» пользовательские функции, такие как запросы get_post_custom и wordpress. Простое решение
который изменяет базу данных всей системы (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 во второй базе данных.источник