Использование wpdb для подключения к отдельной базе данных
-
-
Другая база данных MySQL или другой тип базы данных?Вам по-прежнему нужен доступ к обычной базе данных WordPress или вы перемещаете сайт из одной БД в другую?Another MySQL database, or another database type? Do you still want access to the regular WordPress database, or are you moving the site from one DB to another?
- 0
- 2010-09-10
- EAMann
-
Да,еще одна база данных MySQL.Это отдельная БД на том же сервере,и это не Wordpress.Это настраиваемая база данных с информацией,которую я хочу отображать внутри wordpress.Yes, another MySQL database. It's a separate DB on the same server, and it's not a Wordpress one. It's a custom db, with information I want to display inside wordpress.
- 1
- 2010-09-10
- Wadih M.
-
Если бы вы сделали это с объектом $ wpdb,если бы это было вообще возможно,он отключил бы остальную часть WordPress от существующей базы данных.Так что не рекомендуется.Другой вариант - создать новый экземпляр с помощью EZSQL,который используется WordPress.Я думаю,что EZSQL используется,потому что это уровень,который отвлекает вас от необходимости использоватьphp-pdo-mysql,php-mysql илиphp-mysqli,не зная,что может быть установлено на данном сервере.If you did that with the $wpdb object, if it were even possible, it would disconnect the rest of WordPress from its existing database. So, not recommended. Another option is to create a new instance using EZSQL, which is used by WordPress. I think EZSQL is used because it's a layer that abstracts you from having to use php-pdo-mysql, php-mysql, or php-mysqli, not knowing which might be installed on a given server.
- 1
- 2010-09-10
- Volomike
-
Да,это возможно.Можно создать экземпляр wpdb для доступа к любой базе данных и запроса любой таблицы.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 ответ
- голосов
-
- 2010-09-10
Да,это возможно.
Объект 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>";
Yes it's possible.
The wpdb object can be used to access any database and query any table. Absolutely no need to be Wordpress related, which is very interesting.
The benefit is the ability to use all the wpdb classes and functions like
get_results
, etc so that there's no need to re-invent the wheel.Here's how:
$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>";
-
Буйя.Жаль,что все эти комментарии были добавлены к самому вопросу,чтобы помешать вашему точному ответу.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@ Джереми Кларк: Согласен.Надеемся,что наши товарищи по составлению слов будут более осторожны,чтобы не распространять невинно дезинформацию.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
вы также можете сэкономить время,используя `global $ wpdb`.Но перед запуском метода $ wpdb->get_results вы должны включить wp-load.php как: `require_once ('/ваш/wordpress/wp-load.php');`you can also save time by using `global $wpdb`. But before firing $wpdb->get_results method, you must include wp-load.php as: `require_once('/your/wordpress/wp-load.php');`
- 1
- 2015-09-19
- Junior Mayhé
-
Установите префикс WPDB,чтобы WP_Query иget_post генерировали правильный запрос sql,вызывая `$mydb-> set_prefix ('wp _');`Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$mydb->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
Я знаю,что это старый поток,но я не могу не чувствовать,что сжатие переменной `$mydb` новым объектом может оставить соединение открытым (я мог ошибаться).Я бы проверил,создан ли уже экземпляр $mydb из предыдущего вызова,и если да,то закройте соединение,прежде чем запускать новый экземпляр.например (извините,не могу сделать аккуратные блоки кода Markdown в комментариях): `if ($mydb!=null) {$mydb-> close ();} `I know this is an old thread, but I can't help but feel squashing the `$mydb` variable with a new object could leave a connection open (I could be wrong). I would check to see if `$mydb` is already instantiated from a previous call, and if so, close the connection before spinning up a new instance. eg (sorry can't do neat Markdown code blocks in the comments): `if ($mydb != null) { $mydb->close(); }`
- 1
- 2020-01-21
- joehanna
-
- 2010-09-11
Подключиться ко второй базе данных в 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);
Connecting to a second database is easy in WordPress, you simply create a new instance of the WPDB class and use it the same way you would use the standard $wpdb instance we all know and love.
Assuming the second database has the same login information as the main WP one you can even use the predefined constants from wp-config.php to avoid hardcoding the login information.
/** * 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-> живые среды,в которых данные для входа могут измениться.This is somewhat redundant to Wadih's answer but I think my code example is a bit clearer and its also important to remember the db login constant's as they are almost always the right ones to use and otherwise you risk issues when moving from dev->stage->live environments where the login details might change.
- 0
- 2010-09-11
- jerclarke
-
Установите префикс WPDB,чтобы WP_Query иget_post генерировали правильный sql-запрос,вызывая `$ second_db-> set_prefix ('wp _');`Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$second_db->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
- 2010-12-29
никто этого не сказал,поэтому я подумал,что добавлю еще более простой способ ..
до тех пор,пока ваша дополнительная база данных имеет те же данные пользователя/пароля для доступа к ней,что и ваша база данных wordpress,вы можете использовать имя базы данных перед именем таблицы,как это
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
no one has said this so I thought I'd add an even easier way..
as long as your additional database has the same user/pass details to access it as your wordpress database you can use the database name before the table name like this
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
-
По моему опыту,это работает только для _get_ данных,то есть с использованием SELECT.Вы не можете вставить данные.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
не будет работать внешне,it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
Хотя они будут работать,вы потеряете возможность использовать «другие» настраиваемые функции,такие какget_post_custom и запросы wordpress.Простое решение
$wpdb->select('database_name');
,который изменяет базу данных в масштабе всей системы (mysql select_db).Метод database.table работает,если вы просто хотите сделать простой запрос,но если вы хотите получить доступ к другому блогу wordpress,вы можете использовать select.Когда вы закончите,вам просто нужно будет вернуть его обратно,иначе ваш блог может делать странные вещи.
While these will work, you'll lose the ability to use the "other" custom features such as get_post_custom and wordpress queries. The simple solution is
$wpdb->select('database_name');
which changes the database system-wide (a mysql select_db). The database.table method works if you just want to make a simple query, but if you want to access another wordpress blog you can use select. You'll just need to change it back when you're done or your blog may do strange things.
-
Я использую это решение,и оно отлично работает,за исключением одного.По какой-то неизвестной причине `wp_get_post_terms ()`,похоже,не использует недавно выбранную БД??Все другие функции,которые я пробовал (например,get_post_meta (),get_posts () и т.д.),похоже,работают нормально,но wp_get_post_terms (),похоже,работает с базой данных DB_NAME.Есть идеи?I'm using this solution and it works great, except for one thing. For some unknown reason `wp_get_post_terms()` doesn't seem to use the newly selected DB?? Every other function I've tried (like `get_post_meta()`, `get_posts()` etc) seems to work just fine but `wp_get_post_terms()` seems to work towards the `DB_NAME` database. Any ideas?
- 0
- 2013-07-09
- powerbuoy
-
- 2010-09-10
Я пока не могу комментировать,но я хотел бы подробнее рассказать об ответе Вадих М. (и это здорово).
Класс базы данных WP - это настроенная версияezSQL Джастина Винсента.Если вам нравится интерфейс и вы хотите создать сайт,не основанный на WordPress,вы можете проверить его: http://justinvincent.com/ezsql
I can't comment yet, but I wanted to expand on Wadih M.'s answer (which is great).
WP's database class is a customized version of Justin Vincent's ezSQL. If you like the interface and you're wanting to do a site that's not WordPress-based, you might want to check it out: http://justinvincent.com/ezsql
-
ezSQL меня очень разочаровал,поскольку пришел из WPDB.Никаких инструкций «подготовить»,«вставить» или «обновить» ... Мне нравится использовать весь класс WPDB в том виде,в каком он существует,что возможно,если включить в проект пару файлов из BackPress.ezSQL was really frustrating for me, coming from WPDB. No "prepare" statements, no "insert" or "update"... I like to use the entire WPDB class as it exists, which is possible by including a couple files out of BackPress in your project.
- 0
- 2011-04-22
- goldenapples
-
@gabrielk Ссылка мертва - новая: [1] [1]: http://justinvincent.com/ezsql@gabrielk The link is dead - new one is: [1] [1]: http://justinvincent.com/ezsql
- 0
- 2013-11-23
- Hexodus
-
- 2011-04-22
Мне было трудно использовать
$wpdb
для подключения ко второй базе данных блога с родительского сайта,которому необходимо обновить два блога.Я использовал$wpdb->select($dbname, $dbh)
для выбора второй базы данных,но все еще получал результаты из первой базы данных.Я решил проблему,вызвав
wp_cache_flush()
,чтобы очистить кеш WordPress перед вызовом функций WP для второй базы данных.I was struggling with using
$wpdb
to connect to a second blog database from a parent site that needs to update two blogs. I used$wpdb->select($dbname, $dbh)
to select the second database, but I was still getting results from the first database.I resolved the problem by calling
wp_cache_flush()
to clear the WordPress cache before calling WP functions on the second database.
Я хочу подключить
wpdb
к другой базе данных.Как создать экземпляр и передать ему имя базы данных/имя пользователя/пароль?Спасибо