Menggunakan wpdb untuk terhubung ke database terpisah


86

Saya ingin terhubung wpdbke database lain. Bagaimana cara membuat instance dan memberikannya nama database / nama pengguna / kata sandi?

Terima kasih


Database MySQL lain, atau tipe database lain? Apakah Anda masih ingin akses ke database WordPress biasa, atau apakah Anda memindahkan situs dari satu DB ke yang lain?
EAMann

1
Ya, database MySQL lain. Ini adalah DB terpisah pada server yang sama, dan itu bukan Wordpress. Ini adalah db khusus, dengan informasi yang ingin saya tampilkan di dalam wordpress.
Wadih M.

1
Jika Anda melakukannya dengan objek $ wpdb, jika itu mungkin, itu akan memutuskan sisa WordPress dari database yang ada. Jadi, tidak disarankan. Pilihan lain adalah membuat contoh baru menggunakan EZSQL, yang digunakan oleh WordPress. Saya pikir EZSQL digunakan karena ini adalah lapisan yang mengabstraksi Anda karena harus menggunakan php-pdo-mysql, php-mysql, atau php-mysqli, tidak tahu yang mungkin diinstal pada server tertentu.
Volomike

3
Iya itu mungkin. wpdb dapat digunakan untuk mengakses basis data apa saja dan meminta tabel apa saja.
Wadih M.

Jawaban:


139

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>";

4
Booyah. Sayang sekali semua komentar itu ditambahkan pada pertanyaan itu sendiri untuk memblokir jawaban akurat Anda.
jerclarke

@Jeremy Clarke: Saya setuju. Berharap rekan-rekan wordpresser kita akan lebih berhati-hati untuk tidak menyebarkan informasi yang tidak bersalah.
Wadih M.

1
Anda juga dapat menghemat waktu dengan menggunakan global $wpdb. Tetapi sebelum menjalankan $ wpdb-> get_results, Anda harus menyertakan wp-load.php sebagai: require_once('/your/wordpress/wp-load.php');
Junior M

Setel awalan WPDB untuk membuat WP_Query dan get_post untuk menghasilkan kueri sql yang benar dengan menelepon$mydb->set_prefix('wp_');
MR

30

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);

Ini agak berlebihan untuk jawaban Wadih tapi saya pikir contoh kode saya sedikit lebih jelas dan juga penting untuk mengingat konstanta login db karena mereka hampir selalu yang tepat untuk digunakan dan jika tidak, Anda berisiko mengalami masalah ketika pindah dari dev-> stage- > lingkungan langsung tempat detail login bisa berubah.
jerclarke

Setel awalan WPDB untuk membuat WP_Query dan get_post untuk menghasilkan kueri sql yang benar dengan menelepon$second_db->set_prefix('wp_');
MR

21

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);

Dari pengalaman saya, ini hanya berfungsi untuk mendapatkan data, yaitu menggunakan SELECT. Anda tidak dapat memasukkan data.
Pelindung satu

itu tidak akan bekerja secara eksternal,
Wasim A.

7

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.


Saya menggunakan solusi ini dan ini bekerja dengan baik, kecuali untuk satu hal. Untuk beberapa alasan yang 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_NAMEbasis data. Ada ide?
powerbuoy

7

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


ezSQL benar-benar membuat saya frustasi, datang dari WPDB. Tidak ada pernyataan "siapkan", tidak ada "masukkan" atau "perbarui" ... Saya ingin menggunakan seluruh kelas WPDB sebagaimana adanya, yang dimungkinkan dengan menyertakan beberapa file dari BackPress dalam proyek Anda.
goldenappples

@gabrielk Tautannya sudah mati - yang baru adalah: [1] [1]: justinvincent.com/ezsql
Hexodus

4

Saya kesulitan menggunakan $wpdbuntuk 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.