एक अलग डेटाबेस से कनेक्ट करने के लिए wpdb का उपयोग करना


86

मैं wpdbदूसरे डेटाबेस से जुड़ना चाहता हूं । मैं उदाहरण कैसे बनाऊँ और इसे डेटाबेस का नाम / उपयोगकर्ता नाम / पासवर्ड पास करूँ?

धन्यवाद


एक अन्य MySQL डेटाबेस, या एक अन्य डेटाबेस प्रकार? क्या आप अभी भी नियमित वर्डप्रेस डेटाबेस तक पहुंच चाहते हैं, या आप साइट को एक डीबी से दूसरे में स्थानांतरित कर रहे हैं?
ईमन सिप

1
हाँ, एक और MySQL डेटाबेस। यह एक ही सर्वर पर एक अलग DB है, और यह एक Wordpress नहीं है। यह एक कस्टम डीबी है, जानकारी के साथ मैं वर्डप्रेस के अंदर प्रदर्शित करना चाहता हूं।
वडीह एम।

1
यदि आपने $ wpdb ऑब्जेक्ट के साथ ऐसा किया है, यदि यह संभव भी था, तो यह अपने मौजूदा डेटाबेस से बाकी वर्डप्रेस को डिस्कनेक्ट कर देगा। तो, अनुशंसित नहीं है। एक अन्य विकल्प EZSQL का उपयोग करके एक नया उदाहरण बनाना है, जिसका उपयोग वर्डप्रेस द्वारा किया जाता है। मुझे लगता है कि EZSQL का उपयोग किया जाता है क्योंकि यह एक ऐसी परत है जो आपको php-pdo-mysql, php-mysql, या php-mysqli का उपयोग करने से रोकती है, न कि यह जानने के लिए कि किसी दिए गए सर्वर पर स्थापित किया जा सकता है।
Volomike

3
हाँ, यह मुमकिन है। किसी भी डेटाबेस को एक्सेस करने और किसी भी टेबल को क्वेरी करने के लिए wpdb को तत्काल किया जा सकता है।
वडीह एम।

जवाबों:


138

हाँ, यह मुमकिन है।

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

3
Booyah। बहुत बुरा उन सभी टिप्पणियों को सवाल पर जोड़ा गया जो आपके सटीक उत्तर को अवरुद्ध कर सकते हैं।
jerclarke

@ जेरेमी क्लार्क: मैं सहमत हूं। हमारे साथी वर्डप्रेस को उम्मीद है कि निर्दोष रूप से कीटाणु न फैलाएं।
वादी एम।

1
आप समय का उपयोग करके भी बचत कर सकते हैं global $wpdb। लेकिन फायरिंग से पहले $ wpdb-> get_results मेथड में आपको wp-load.php को शामिल करना होगा: require_once('/your/wordpress/wp-load.php');
Junior M

WP_Query और get_post बनाने के लिए WPDB उपसर्ग सेट करें कॉल करके सही sql क्वेरी उत्पन्न करने के लिए$mydb->set_prefix('wp_');
MR

30

वर्डप्रेस में एक दूसरे डेटाबेस से कनेक्ट करना आसान है, आप बस 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);

यह वादी के उत्तर के लिए कुछ हद तक बेमानी है, लेकिन मुझे लगता है कि मेरा कोड उदाहरण थोड़ा स्पष्ट है और इसके लिए डीबी लॉगिन कॉन्स्टेंट को याद रखना भी महत्वपूर्ण है क्योंकि वे उपयोग करने के लिए लगभग हमेशा सही होते हैं और अन्यथा जब आप देव से आगे बढ़ते हैं, तो आप मुद्दों को जोखिम में डालते हैं। > लाइव वातावरण जहां लॉगिन विवरण बदल सकते हैं।
jerclarke

WP_Query और get_post बनाने के लिए WPDB उपसर्ग सेट करें कॉल करके सही sql क्वेरी उत्पन्न करने के लिए$second_db->set_prefix('wp_');
MR

21

किसी ने भी यह नहीं कहा है तो मुझे लगा कि मैं इससे भी आसान तरीका जोड़ूंगा।

जब तक आपके अतिरिक्त डेटाबेस में एक ही उपयोगकर्ता / पास का विवरण है, इसे अपने वर्डप्रेस डेटाबेस के रूप में एक्सेस करने के लिए आप इस से पहले टेबल नाम से पहले डेटाबेस के नाम का उपयोग कर सकते हैं।

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

मेरे अनुभव से, यह केवल डेटा प्राप्त करने, अर्थात उपयोग करने के लिए काम करता है SELECT। आप डेटा नहीं डाल सकते।
रक्षक एक

यह बाहरी रूप से काम नहीं करेगा,
वसीम ए।

7

जब ये काम करेंगे, तो आप "अन्य" कस्टम सुविधाओं जैसे कि get_post_custom और WordPress प्रश्नों का उपयोग करने की क्षमता खो देंगे। सरल उपाय है

$wpdb->select('database_name');

जो डेटाबेस सिस्टम-वाइड (एक mysql select_db) को बदलता है। अगर आप सिर्फ एक साधारण क्वेरी बनाना चाहते हैं, तो डेटाबेस.table पद्धति काम करती है, लेकिन यदि आप किसी अन्य वर्डप्रेस ब्लॉग का उपयोग करना चाहते हैं, तो आप चुन सकते हैं। आपको बस इसे वापस करने की आवश्यकता होगी जब आप कर रहे हों या आपका ब्लॉग अजीब चीजें कर सकता है।


मैं इस समाधान का उपयोग कर रहा हूं और यह एक चीज को छोड़कर बहुत अच्छा काम करता है। किसी अज्ञात कारण wp_get_post_terms()से नए चयनित DB का उपयोग नहीं लगता है ?? मेरे द्वारा किए गए हर दूसरे फ़ंक्शन (जैसे get_post_meta(), get_posts()आदि) ठीक wp_get_post_terms()काम करने लगता है, लेकिन DB_NAMEडेटाबेस की ओर काम करता है। कोई विचार?
पॉवरबॉय

7

मैं अभी तक टिप्पणी नहीं कर सकता, लेकिन मैं वाडीह एम के जवाब (जो बहुत अच्छा है) पर विस्तार करना चाहता था।

WP का डेटाबेस वर्ग जस्टिन विन्सेंट के ezSQL का एक अनुकूलित संस्करण है। यदि आप इंटरफ़ेस पसंद करते हैं और आप एक ऐसी साइट करना चाहते हैं जो वर्डप्रेस-आधारित नहीं है, तो आप इसे देखना चाहते हैं: http://justinvincent.com/ezsql


WPDB से आने वाले ezSQL वास्तव में मेरे लिए निराशाजनक था। कोई "तैयारी" बयान नहीं, कोई "इंसर्ट" या "अपडेट" नहीं ... मैं संपूर्ण WPDB वर्ग का उपयोग करना पसंद करता हूं क्योंकि यह मौजूद है, जो आपकी परियोजना में बैकस्पेस से बाहर एक युगल फ़ाइलों को शामिल करके संभव है।
सुनहरा

@gabrielk लिंक मृत है - नया है: [1] [१]: justinvincent.com/ezsql
Hexodus

4

मैं $wpdbमूल साइट से दूसरे ब्लॉग डेटाबेस से कनेक्ट करने के लिए उपयोग कर रहा था, जिसमें दो ब्लॉग अपडेट करने की आवश्यकता थी। मैं $wpdb->select($dbname, $dbh)दूसरे डेटाबेस का चयन करता था, लेकिन मुझे अभी भी पहले डेटाबेस से परिणाम मिल रहे थे।

मैंने wp_cache_flush()दूसरे डेटाबेस पर WP फ़ंक्शन को कॉल करने से पहले वर्डप्रेस कैश को खाली करने के लिए कॉल करके समस्या का समाधान किया ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.