একটি পৃথক ডাটাবেসের সাথে সংযোগ করতে ডাব্লুপিডিবি ব্যবহার করে


86

আমি wpdbঅন্য একটি ডাটাবেসে কানেক্ট করতে চাই । আমি কীভাবে উদাহরণটি তৈরি করব এবং এটি ডাটাবেসের নাম / ব্যবহারকারীর নাম / পাসওয়ার্ডটি পাস করব?

ধন্যবাদ


অন্য মাইএসকিউএল ডাটাবেস, বা অন্য একটি ডাটাবেস টাইপ? আপনি কি এখনও নিয়মিত ওয়ার্ডপ্রেস ডাটাবেসে অ্যাক্সেস চান, বা আপনি সাইটটি একটি ডিবি থেকে অন্য দিকে নিয়ে যাচ্ছেন?
EAMAN

1
হ্যাঁ, অন্য মাইএসকিউএল ডাটাবেস এটি একই সার্ভারে একটি পৃথক ডিবি, এবং এটি কোনও ওয়ার্ডপ্রেস নয়। এটি একটি কাস্টম ডিবি, তথ্য সহ আমি ওয়ার্ডপ্রেসের ভিতরে প্রদর্শন করতে চাই।
ওয়াদিহ এম।

1
যদি আপনি এটি $ wpdb অবজেক্টের সাহায্যে করেন তবে এটি যদি সম্ভবও হয়ে থাকে তবে এটি বিদ্যমান ডাটাবেস থেকে বাকী ওয়ার্ডপ্রেস সংযোগ বিচ্ছিন্ন করে দেবে। সুতরাং, প্রস্তাবিত নয়। আরেকটি বিকল্প হ'ল EZSQL ব্যবহার করে একটি নতুন উদাহরণ তৈরি করা, যা ওয়ার্ডপ্রেস দ্বারা ব্যবহৃত হয়। আমি মনে করি ইজেডএসকিউএল ব্যবহৃত হয়েছে কারণ এটি এমন একটি স্তর যা আপনাকে পিএইচপি-পিডো-মাইএসকিএল, পিএইচপি-মাইএসকিএল, বা পিএইচপি-মাইসকিলি ব্যবহার করা থেকে বিরত রাখে, প্রদত্ত সার্ভারে কোনটি ইনস্টল করা হতে পারে তা না জেনে।
ভলমাইক

3
হ্যাঁ এটা সম্ভব. যে কোনও ডাটাবেস অ্যাক্সেস করতে এবং যে কোনও টেবিলটি জিজ্ঞাসা করতে wpdb তাত্ক্ষণিকভাবে ব্যবহার করা যেতে পারে।
ওয়াদিহ এম।

উত্তর:


138

হ্যাঁ এটা সম্ভব.

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

@ জেরেমি ক্লার্ক: আমি সম্মত। আমাদের সহকর্মী ওয়ার্ডপ্রেসারদের আশা করা নির্দোষভাবে ছদ্মবেশে ছড়িয়ে দেওয়া না আরও সচেতন হবে careful
ওয়াদিহ এম।

1
আপনি ব্যবহার করে সময় বাঁচাতে পারেন global $wpdb। তবে firing wpdb-> get_results পদ্ধতিতে গুলি চালানোর আগে আপনাকে wp-load.php অন্তর্ভুক্ত করতে হবে: require_once('/your/wordpress/wp-load.php');
জুনিয়র এম

ডাব্লুপিপিউকিউরি করতে ডাব্লুপিডিবি উপসর্গ সেট করুন এবং কল করে সঠিক এসকিউএল কোয়েরি উত্পন্ন করতে get_post$mydb->set_prefix('wp_');
এমআর

30

ওয়ার্ডপ্রেসে দ্বিতীয় ডাটাবেসের সাথে সংযোগ স্থাপন করা সহজ, আপনি কেবল ডাব্লুপিডিবি শ্রেণির একটি নতুন উদাহরণ তৈরি করেন এবং এটি একইভাবে ব্যবহার করুন আপনি স্ট্যান্ডার্ড $ ডাব্লুপিডিবি উদাহরণটি ব্যবহার করবেন যা আমরা সবাই জানি এবং ভালোবাসি।

ধরে নিই যে দ্বিতীয় ডাটাবেসটিতে মূল ডাব্লুপি হিসাবে একই লগইন তথ্য রয়েছে আপনি লগইন তথ্যকে হার্ডকোডিং এড়ানোর জন্য ডাব্লুপি-কনফিগারেশন থেকে পূর্বনির্ধারিত ধ্রুবকগুলি ব্যবহার করতে পারেন।

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

ডাব্লুপিপিউকিউরি করতে ডাব্লুপিডিবি উপসর্গ সেট করুন এবং কল করে সঠিক এসকিউএল কোয়েরি উত্পন্ন করতে get_post$second_db->set_prefix('wp_');
এমআর

21

কেউ এ কথা বলেনি তাই আমি ভেবেছিলাম আমি আরও সহজ উপায় যুক্ত করব ..

আপনার ওয়ার্ডপ্রেস ডাটাবেস হিসাবে এটি অ্যাক্সেস করতে আপনার অতিরিক্ত ডাটাবেসটিতে একই ব্যবহারকারী / পাসের বিশদ থাকে আপনি এই জাতীয় সারণির নামের আগে ডাটাবেসের নামটি ব্যবহার করতে পারবেন

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

আমার অভিজ্ঞতা থেকে, এটি কেবল ডেটা পাওয়ার জন্য কাজ করে, অর্থাৎ ব্যবহার করে SELECT। আপনি ডেটা .োকাতে পারবেন না।
রক্ষক এক

এটি বাহ্যিকভাবে কাজ করবে না,
ওয়াসিম এ।

7

এগুলি কাজ করার সময়, আপনি get_post_custom এবং ওয়ার্ডপ্রেস কোয়েরির মতো "অন্যান্য" কাস্টম বৈশিষ্ট্যগুলি ব্যবহার করার ক্ষমতা হারাবেন। সহজ সমাধানটি হ'ল

$wpdb->select('database_name');

যা ডেটাবেস সিস্টেম-ব্যাপী পরিবর্তন করে (একটি mysql select_db)। ডাটাবেস.টিবেল পদ্ধতিটি যদি আপনি কেবল একটি সাধারণ কোয়েরি করতে চান তবে কাজ করে তবে আপনি যদি অন্য একটি ওয়ার্ডপ্রেস ব্লগ অ্যাক্সেস করতে চান তবে আপনি নির্বাচন করতে পারেন। আপনার কাজ শেষ হয়ে গেলে আপনার এটি পরিবর্তন করতে হবে বা আপনার ব্লগটি অদ্ভুত কাজ করতে পারে।


আমি এই সমাধানটি ব্যবহার করছি এবং এটি একটি জিনিস বাদ দিয়ে দুর্দান্ত কাজ করে। কোনও অজানা কারণে wp_get_post_terms()সদ্য নির্বাচিত ডিবি ব্যবহার করবেন বলে মনে হচ্ছে না ?? আমি চেষ্টা করেছি এমন অন্যান্য ফাংশন (যেমন get_post_meta(), get_posts()ইত্যাদি) ঠিক ঠিক wp_get_post_terms()কাজ করে বলে মনে হয় তবে DB_NAMEডাটাবেসের দিকে কাজ করে বলে মনে হয় । কোন ধারনা?
পাওয়ারবয়

7

আমি এখনও মন্তব্য করতে পারি না, তবে আমি ওয়াদিহ এম এর উত্তরে (যা দুর্দান্ত) প্রসারিত করতে চেয়েছিলাম।

ডব্লিউপি এর ডাটাবেস ক্লাসটি জাস্টিন ভিনসেন্টের ইজএসকিউএল এর একটি কাস্টমাইজড সংস্করণ। আপনি যদি ইন্টারফেসটি পছন্দ করেন এবং আপনি এমন কোনও সাইট করতে চান যা ওয়ার্ডপ্রেস-ভিত্তিক নয়, আপনি এটি যাচাই করতে চাইতে পারেন: http://justinvincent.com/ezsql


ডাব্লুপিডিবি থেকে এসে ইজএসকিউএল সত্যিই হতাশাগ্রস্ত হয়েছিল। কোনও "প্রস্তুত" বিবৃতি নেই, "সন্নিবেশ" বা "আপডেট" নেই ... আমি সম্পূর্ণ ডাব্লুপিডিবি শ্রেণীর উপস্থিতিটি ব্যবহার করতে চাই, এটি আপনার প্রকল্পের ব্যাকপ্রেসের বাইরে কয়েকটি ফাইল অন্তর্ভুক্ত করে সম্ভব।
সুবর্ণপ্লেস


4

আমি $wpdbএকটি প্যারেন্ট সাইট থেকে দ্বিতীয় ব্লগ ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য লড়াই করে যাচ্ছিলাম যা দুটি ব্লগ আপডেট করতে হবে। আমি $wpdb->select($dbname, $dbh)দ্বিতীয় ডাটাবেস নির্বাচন করতাম, তবে আমি এখনও প্রথম ডাটাবেস থেকে ফলাফল পাচ্ছি।

wp_cache_flush()দ্বিতীয় ডাটাবেসে ডাব্লুপি ফাংশন কল করার আগে আমি ওয়ার্ডপ্রেস ক্যাশে সাফ করার জন্য কল করে সমস্যার সমাধান করেছি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.