কাস্টম টেবিলগুলিতে $ 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"ফলে একটি বহুবিধ ইনস্টলেশনতে একটি অবৈধ সারণী তৈরি হবে। কারণ এটি টেবিলে ডিবি উপসর্গটি সংযুক্ত করবে। তবে, মাল্টিসাইট কেবলমাত্র একটি ব্যবহারকারীর টেবিল ব্যবহার করে, যেহেতু সমস্ত ব্যবহারকারীরা নেটওয়ার্ক ব্যবহারকারী। সুতরাং যদি ক্যোয়ারীতে wp_users বা wp_usermeta সারণী জড়িত থাকে তবে আপনাকে অবশ্যই যথাক্রমে $wpdb->usersবা ব্যবহার করতে হবে $wpdb->usermeta
butlerblog
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.