Я хочу підключитися wpdb
до іншої бази даних. Як створити екземпляр і передати йому ім'я бази даних / ім'я користувача / пароль?
Дякую
Я хочу підключитися wpdb
до іншої бази даних. Як створити екземпляр і передати йому ім'я бази даних / ім'я користувача / пароль?
Дякую
Відповіді:
Так, це можливо.
Об'єкт 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>";
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, щоб уникнути жорсткого кодування інформації для входу.
/**
* 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_');
ніхто не сказав цього, тому я подумав, що я додам ще простіший спосіб ..
до тих пір, поки у вашій додатковій базі даних є ті самі дані користувача / передачі для доступу до неї, як у вашій базі даних Wordpress, ви можете використовувати ім'я бази даних перед назвою таблиці, як ця
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Ви не можете вставити дані.
Хоча вони працюватимуть, ви втратите можливість користуватися "іншими" спеціальними функціями, такими як запити 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
базою даних. Будь-які ідеї?
Я поки не можу коментувати, але хотів розкрити відповідь Вадіха М. (що чудово).
Клас бази даних WP - це спеціалізована версія ezSQL Джастіна Вінсента. Якщо вам подобається інтерфейс і ви хочете створити сайт, який не базується на WordPress, ви можете перевірити його: http://justinvincent.com/ezsql
Мені було важко використовувати $wpdb
підключення до другої бази даних блогу з батьківського сайту, який потребує оновлення двох блогів. Я $wpdb->select($dbname, $dbh)
вибирав другу базу даних, але все одно отримував результати з першої бази даних.
Я вирішив проблему, зателефонувавши wp_cache_flush()
очистити кеш WordPress перед тим, як викликати функції WP у другій базі даних.