Chcę połączyć się wpdbz inną bazą danych. Jak utworzyć instancję i przekazać jej nazwę bazy danych / nazwę użytkownika / hasło?
Dzięki
Chcę połączyć się wpdbz 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_resultsitp., 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_NAMEbazy. 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.