क्या कस्टम टेबल में $ wpdb-> उपसर्ग का उपयोग करना अनिवार्य है


16

क्षमा करें यदि यह प्रश्न तुच्छ है। मैं अभी वर्डप्रेस में प्लगइन्स विकसित करना शुरू कर रहा हूं।

सभी ट्यूटोरियल में मैंने यह पाया: कस्टम टेबल बनाते समय, $wpdb->prefix इसका उपयोग किया जाता है।

उदाहरण:

$table_name = $wpdb->prefix . "liveshoutbox";

मेरा प्रश्न:

क्या इसका उपयोग करना अनिवार्य है $wpdb->prefix? क्या होगा यदि मैं अपने कस्टम तालिकाओं के लिए उपसर्ग का उपयोग नहीं करता हूं?

जवाबों:


22

यह अनिवार्य है, हालांकि इसे लागू नहीं किया गया है।

परिदृश्य पर विचार करें जब दो वर्डप्रेस साइट को एक ही डेटाबेस में सेटअप किया गया हो। एक उपसर्ग के साथ wp_और दूसरा साथ wp2_। यदि आप उपसर्ग के साथ दोनों साइटों में अपना प्लगइन स्थापित करते हैं, तो आपकी बनाई गई तालिका wp_liveshoutboxपहली साइट के wp2_liveshoutboxलिए और दूसरी साइट के लिए होगी। लेकिन यदि आप उपसर्ग को छोड़ देते हैं, तो दोनों साइट नाम की एक ही तालिका का उपयोग कर रही होंगी liveshoutboxऔर पूरी चीज़ टूट जाएगी।


12
दूसरे शब्दों में यह अनिवार्य है । :)
रार्स्ट

4

निम्नलिखित को धयान मे रखते हुए:

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

आपका प्लगइन एक ऐसे उपयोगकर्ता द्वारा स्थापित किया गया है, जिसके पास सुरक्षा की कुछ अवधारणा है, और बॉट्स को ब्लॉक करने के लिए तालिका उपसर्ग को बदल दिया है जो इंजेक्शन लगाने की कोशिश करते हैं select * from wp_users जो सिस्टम में करता है। यहां तक ​​कि अगर वे एक नई भेद्यता पाते हैं तो यह काम नहीं करेगा।

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

यदि मेरे पास एक जटिल प्रश्न है और मैं लिखने के दर्द से निपटना नहीं चाहता हूं तो 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....आप दुहराव का उपयोग कर सकते हैं। उदाहरण के लिए:

$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';

$change = array (
    '%table%' => $wpdb->prefix . '_mytable',
    '%meta%'  => $wpdb->prefix . '_mytablemeta'
    );


$sql = str_replace( array_keys( $change ), array_values( $change ), $query );

$results = $wpdb->get_results( $sql );

वर्डप्रेस लगातार बदल रहा है। आज जो "काम करता है" हो सकता है वह कल काम न करे। इसलिए एपीआई कार्य हैं। वर्डप्रेस डेवलपर्स सुनिश्चित करेंगे कि सार्वजनिक एपीआई व्यवहार सुसंगत है (या वे फ़ंक्शन को ह्रास करेंगे)। यदि आप आंतरिक विधि कॉल का उपयोग शुरू करते हैं क्योंकि यह 'उस तरह से तेज़' है तो यह आमतौर पर आपको काटने के लिए वापस आ जाएगा। सॉफ्टवेयर में बहुत कम सच्चे शॉर्टकट हैं - वे अभी से आवश्यक कार्य को बाद में स्थानांतरित करते हैं, और आपके क्रेडिट कार्ड की तरह "बाद में" आमतौर पर अधिक खर्च होते हैं।


चूंकि इसमें मल्टीसाइट का उल्लेख किया गया है, इसलिए ध्यान देने के लिए एक अतिरिक्त तत्व जो मैंने उत्तर में नहीं देखा है वह यह है कि उपयोग करने $wpdb->prefix . "users"से एक मल्टीसाइट इंस्टॉलेशन में अमान्य तालिका हो जाएगी। ऐसा इसलिए है क्योंकि यह तालिका के लिए db उपसर्ग को चिपकाएगा। हालांकि, मल्टीसाइट केवल एक उपयोगकर्ता तालिका का उपयोग करता है, क्योंकि सभी उपयोगकर्ता नेटवर्क उपयोगकर्ता हैं। इसलिए यदि क्वेरी में wp_users या wp_usermeta टेबल शामिल हैं, तो आपको $wpdb->usersया $wpdb->usermetaक्रमशः उपयोग करना चाहिए ।
बटलरब्लॉग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.