Chcę połączyć się wpdb
z inną bazą danych. Jak utworzyć instancję i przekazać jej nazwę bazy danych / nazwę użytkownika / hasło?
Dzięki
Chcę połączyć się wpdb
z inną bazą danych. Jak utworzyć instancję i przekazać jej nazwę bazy danych / nazwę użytkownika / hasło?
Dzięki
Odpowiedzi:
Tak, to możliwe.
Obiekt wpdb może służyć do uzyskiwania dostępu do dowolnej bazy danych i przeszukiwania dowolnej tabeli. Absolutnie nie trzeba być związanym z Wordpress, co jest bardzo interesujące.
Korzyścią jest możliwość korzystania ze wszystkich klas i funkcji wpdb, takich jak get_results
itp., Dzięki czemu nie trzeba ponownie wymyślać koła.
Oto jak:
$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>";
global $wpdb
. Ale przed uruchomieniem metody $ wpdb-> get_results, musisz dołączyć wp-load.php jako: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
Połączenie z drugą bazą danych jest łatwe w WordPressie, wystarczy utworzyć nową instancję klasy WPDB i używać jej w taki sam sposób, jak zwykłej instancji $ wpdb, którą wszyscy znamy i lubimy.
Zakładając, że druga baza danych zawiera te same dane logowania, co główna WP, możesz nawet użyć predefiniowanych stałych z wp-config.php, aby uniknąć twardego wpisania danych logowania.
/**
* 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);
$second_db->set_prefix('wp_');
nikt tego nie powiedział, więc pomyślałem, że dodałbym jeszcze prostszy sposób ...
tak długo, jak twoja dodatkowa baza danych ma takie same dane użytkownika / przepustki, aby uzyskać do niej dostęp, jak twoja baza danych wordpress, możesz użyć nazwy bazy danych przed nazwą tabeli w ten sposób
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Użycia . Nie możesz wstawić danych.
Chociaż będą działać, stracisz możliwość korzystania z „innych” niestandardowych funkcji, takich jak zapytania get_post_custom i wordpress. Proste rozwiązanie to
$wpdb->select('database_name');
co zmienia bazę danych w całym systemie (mysql select_db). Metoda database.table działa, jeśli chcesz tylko wykonać proste zapytanie, ale jeśli chcesz uzyskać dostęp do innego bloga wordpress, możesz użyć select. Musisz tylko zmienić to z powrotem, gdy skończysz, lub twój blog może robić dziwne rzeczy.
wp_get_post_terms()
nie wydaje się korzystać z nowo wybranego DB? Każda inna funkcja próbowałem (jak get_post_meta()
, get_posts()
etc) wydaje się działać dobrze, ale wp_get_post_terms()
wydaje się działać w kierunku DB_NAME
bazy. Jakieś pomysły?
Nie mogę jeszcze komentować, ale chciałem rozwinąć odpowiedź Wadih M. (co jest świetne).
Klasa bazy danych WP to dostosowana wersja ezSQL Justina Vincenta. Jeśli podoba Ci się interfejs i chcesz stworzyć stronę, która nie jest oparta na WordPressie, możesz go sprawdzić: http://justinvincent.com/ezsql
Miałem problem z $wpdb
łączeniem się z drugą bazą danych blogów z witryny nadrzędnej, która musi zaktualizować dwa blogi. Kiedyś wybrałem $wpdb->select($dbname, $dbh)
drugą bazę danych, ale wciąż otrzymywałem wyniki z pierwszej bazy danych.
Rozwiązałem problem, dzwoniąc wp_cache_flush()
do wyczyszczenia pamięci podręcznej WordPress przed wywołaniem funkcji WP w drugiej bazie danych.