Ayrı bir veritabanına bağlanmak için wpdb kullanma


86

wpdbBaşka bir veritabanına bağlanmak istiyorum . Örneği nasıl oluşturabilirim ve veri tabanı adını / kullanıcı adı / şifresini nasıl iletebilirim?

Teşekkürler


Başka bir MySQL veritabanı veya başka bir veritabanı türü? Normal WordPress veritabanına hala erişmek istiyor musunuz, yoksa siteyi bir DB'den diğerine mi taşıyorsunuz?
EAMann

1
Evet, başka bir MySQL veritabanı. Aynı sunucuda ayrı bir DB var ve bir Wordpress değil. Wordpress içinde görüntülemek istediğim bilgileri içeren özel bir db.
Wadih M.

1
Bunu $ wpdb nesnesiyle yaptıysanız, mümkün olsa bile, WordPress'in kalanını mevcut veritabanından ayıracaktı. Yani, tavsiye edilmez. Başka bir seçenek ise, WordPress tarafından kullanılan EZSQL kullanarak yeni bir örnek oluşturmaktır. Bence EZSQL, belirli bir sunucuya yüklenebileceğini bilmeden php-pdo-mysql, php-mysql veya php-mysqli kullanmak zorunda kalmanızı engelleyen bir katmandır.
Volomike

3
Evet mümkün. Herhangi bir veritabanına erişmek ve herhangi bir tabloyu sorgulamak için wpdb başlatılabilir.
Wadih M.

Yanıtlar:


138

Evet mümkün.

Wpdb nesnesi herhangi bir veritabanına erişmek ve herhangi bir tabloyu sorgulamak için kullanılabilir. Kesinlikle Wordpress ile ilgili olmak gerekmez, ki bu çok ilginç.

Bunun yararı, tüm wpdb sınıflarını ve benzeri işlevleri kullanma becerisidir get_results, böylece tekerleği yeniden icat etmeye gerek kalmaz.

İşte nasıl:

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

3
Booyah. Doğru cevabınızı engellemek için soruna eklenen tüm yorumlar çok kötü.
jerclarke

@ Jeremy Clarke: Katılıyorum. Bizim diğer kelime baskılayıcılarımız umutsuzca dezenformasyonu yaymamak için daha dikkatli olacaktır.
Wadih M.

1
kullanarak da zaman kazanabilirsiniz global $wpdb. Fakat $ wpdb-> get_results yöntemini kullanmadan önce, wp-load.php dosyasını şu şekilde eklemelisiniz: require_once('/your/wordpress/wp-load.php');
Junior M

WP_Query yapmak için WPDB önekini ve arayarak doğru sql sorgusu oluşturmak için get_post'u ayarlayın$mydb->set_prefix('wp_');
MR

30

WordPress'te ikinci bir veritabanına bağlanmak kolaydır, sadece WPDB sınıfının yeni bir örneğini oluşturup, hepimizin bildiği ve sevdiğimiz standart $ wpdb örneğini kullandığınız gibi kullanırsınız.

İkinci veritabanının ana WP ile aynı giriş bilgisine sahip olduğunu varsayalım, giriş bilgilerinin kodlanmasını önlemek için wp-config.php adresinden önceden tanımlanmış sabitleri bile kullanabilirsiniz.

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

Bu biraz Wadih'in cevabına gereksiz geliyor ama kod örneğimin biraz daha net olduğunu düşünüyorum ve db giriş sabitini hatırlamak da önemlidir; çünkü bunlar hemen hemen her zaman doğru olanlardır. > giriş bilgilerinin değişebileceği canlı ortamlar.
jerclarke

WP_Query yapmak için WPDB önekini ve arayarak doğru sql sorgusu oluşturmak için get_post'u ayarlayın$second_db->set_prefix('wp_');
MR

21

kimse bunu söylemedi bu yüzden daha kolay bir yol ekleyeceğimi düşündüm ..

Ek veritabanınız, wordpress veritabanınızla erişmek için aynı kullanıcı / şifre detaylarına sahip olduğu sürece, bunun gibi tablo adından önce veritabanı adını kullanabilirsiniz.

$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);

Tecrübelerime göre, bu sadece veriyi elde etmek için çalışıyor , yani kullanıyor SELECT. Veri ekleyemezsiniz.
Koruyucu bir

harici olarak çalışmayacak,
Wasim A.

7

Bunlar işe yarayacak olsa da, get_post_custom ve wordpress sorguları gibi "diğer" özel özellikleri kullanma yeteneğinizi kaybedeceksiniz. Basit çözüm

$wpdb->select('database_name');

Bu sistem genelinde veritabanı değiştirir (bir mysql select_db). Database.table yöntemi yalnızca basit bir sorgu yapmak istiyorsanız çalışır, ancak başka bir wordpress bloguna erişmek istiyorsanız select'i kullanabilirsiniz. Tamamladığınızda geri değiştirmeniz yeterli olacaktır, aksi halde blogunuz garip şeyler yapabilir.


Bu çözümü kullanıyorum ve bir şey dışında harika çalışıyor. Bazı bilinmeyen bir nedenden dolayı wp_get_post_terms()yeni seçilen DB kullanmıyor gibi görünüyor? Çalıştığım diğer her işlev (gibi get_post_meta(), get_posts()vb.) Gayet iyi çalışıyor, ancak veritabanına wp_get_post_terms()doğru çalışıyor gibi görünüyor DB_NAME. Herhangi bir fikir?
powerbuoy

7

Henüz yorum yapamam, ama Wadih M.'nin cevabını genişletmek istedim (ki bu harika).

WP'nin veritabanı sınıfı, Justin Vincent'ın ezSQL'ine özel bir sürümüdür. Arabirimi seviyorsanız ve WordPress tabanlı olmayan bir site yapmak istiyorsanız, siteyi incelemek isteyebilirsiniz: http://justinvincent.com/ezsql


ezSQL WPDB'den gelen, benim için gerçekten sinir bozucuydu. "İfade" ya da "ekleme" ya da "güncelleme" ya da "güncelleme" yok ... WPDB sınıfını olduğu gibi, projenize BackPress'in dışında birkaç dosya dahil ederek kullanmayı seviyorum.
goldenapples

@gabrielk Bağlantı öldü - yenisi: [1] [1]: justinvincent.com/ezsql
Hexodus 23:13

4

$wpdbİki blogu güncellemesi gereken bir ana siteden ikinci bir blog veritabanına bağlanmak için kullanmakta zorlanıyordum . Kullandığım $wpdb->select($dbname, $dbh)ikinci veritabanını seçmek için, ama yine de ilk veritabanından sonuç vermeye başlamıştı.

wp_cache_flush()İkinci veritabanında WP işlevlerini çağırmadan önce WordPress önbelleğini temizlemek için arayarak sorunu çözdüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.