Saya ingin terhubung wpdb
ke database lain. Bagaimana cara membuat instance dan memberikannya nama database / nama pengguna / kata sandi?
Terima kasih
Saya ingin terhubung wpdb
ke database lain. Bagaimana cara membuat instance dan memberikannya nama database / nama pengguna / kata sandi?
Terima kasih
Jawaban:
Iya itu mungkin.
Objek wpdb dapat digunakan untuk mengakses basis data apa saja dan meminta tabel apa saja. Sama sekali tidak perlu terkait Wordpress, yang sangat menarik.
Manfaatnya adalah kemampuan untuk menggunakan semua kelas dan fungsi wpdb seperti get_results
, dll sehingga tidak perlu menemukan kembali roda.
Begini caranya:
$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
. Tetapi sebelum menjalankan $ wpdb-> get_results, Anda harus menyertakan wp-load.php sebagai: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
Menyambung ke basis data kedua mudah di WordPress, Anda cukup membuat instance baru dari kelas WPDB dan menggunakannya dengan cara yang sama seperti Anda menggunakan instance $ wpdb standar yang kita semua kenal dan sukai.
Dengan asumsi database kedua memiliki informasi login yang sama dengan WP utama, Anda bahkan dapat menggunakan konstanta yang telah ditentukan dari wp-config.php untuk menghindari hardcoding informasi login.
/**
* 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_');
tidak ada yang mengatakan ini jadi saya pikir saya akan menambahkan cara yang lebih mudah ..
selama database tambahan Anda memiliki rincian pengguna / pass yang sama untuk mengaksesnya sebagai database wordpress Anda, Anda dapat menggunakan nama database sebelum nama tabel seperti ini
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Anda tidak dapat memasukkan data.
Meskipun ini akan berfungsi, Anda akan kehilangan kemampuan untuk menggunakan fitur khusus "lainnya" seperti get_post_custom dan permintaan wordpress. Solusi sederhana adalah
$wpdb->select('database_name');
yang mengubah seluruh sistem basis data (a mysql select_db). Metode database.table berfungsi jika Anda hanya ingin membuat permintaan sederhana, tetapi jika Anda ingin mengakses blog wordpress lain, Anda dapat menggunakan pilih. Anda hanya perlu mengubahnya kembali setelah selesai atau blog Anda dapat melakukan hal-hal aneh.
wp_get_post_terms()
tidak diketahui tampaknya tidak menggunakan DB yang baru dipilih ?? Setiap fungsi lain yang saya coba (seperti get_post_meta()
, get_posts()
dll) tampaknya berfungsi dengan baik tetapi wp_get_post_terms()
tampaknya berfungsi menuju DB_NAME
basis data. Ada ide?
Saya belum bisa berkomentar, tetapi saya ingin memperluas jawaban Wadih M. (yang bagus).
Kelas basis data WP adalah versi khusus dari ezSQL Justin Vincent. Jika Anda menyukai antarmuka dan ingin melakukan situs yang tidak berbasis WordPress, Anda mungkin ingin memeriksanya: http://justinvincent.com/ezsql
Saya kesulitan menggunakan $wpdb
untuk terhubung ke database blog kedua dari situs induk yang perlu memperbarui dua blog. Saya dulu $wpdb->select($dbname, $dbh)
memilih database kedua, tetapi saya masih mendapatkan hasil dari database pertama.
Saya menyelesaikan masalah dengan menelepon wp_cache_flush()
untuk menghapus cache WordPress sebelum memanggil fungsi WP pada database kedua.