একটি কাস্টম মডিউলে একটি বাহ্যিক ডাটাবেস সংযোগ কীভাবে সংজ্ঞায়িত করতে এবং ব্যবহার করবেন


10

আমি এমন একটি মডিউল বিকাশ করছি যা বাহ্যিক ডাটাবেস প্রশ্নের উপর নির্ভর করবে। কোনও মডিউল জুড়ে একটি বাহ্যিক ডাটাবেস সংযোগ সংজ্ঞায়িত এবং ব্যবহার করার জন্য কি সেরা অনুশীলন রয়েছে?

এই পৃষ্ঠাটি আমাকে কীভাবে সংযোগ তৈরি করতে হবে তা জানায়, তবে এটি কোনও মডিউলে কোথায় রাখবেন (নির্দিষ্ট হুক?) তাই আমাকে কেবল একবার এটি সংজ্ঞায়িত করতে হবে। এছাড়াও, "db_set_active ('আপনার ডেটাবেসকি') করা কি সর্বদা প্রয়োজন;" বা আমি কোনও যুক্তি পাস করতে পারি যা ডিবি ব্যবহারের জন্য সেট করবে? আমি ড্রুপাল 7 ব্যবহার করছি।


আপনি যদি বিভিন্ন ধরণের ডাটাবেস ব্যবহার করেন তবে আপনার ডিবিটিএনজি মডিউলের প্রয়োজন হবে
শিবাজি

পরামর্শের জন্য ধন্যবাদ, তবে সেই মডিউলটি কেবলমাত্র প্রয়োজনীয় যদি আপনি দ্রুপাল using ব্যবহার করেন। আমি ড্রুপাল using ব্যবহার করছি
হুইস্কি

উত্তর:


10

এই কোডটি স্থাপন করার কোনও নির্দিষ্ট জায়গা নেই (হুক বা মডিউল), আপনি যেখানে এটি প্রয়োজন সেখানে কেবল এটি রেখে দিয়েছেন।
সুতরাং এটি অন্যান্য ডাটাবেসে আপনার প্রশ্নের ঠিক আগে এবং ডিফল্ট ডিবি সেট করার ঠিক পরে চলে যাওয়া উচিত।

যদি আপনার সমস্ত মডিউল বাহ্যিক ডিবির উপর নির্ভর করে তবে এটি আপনার মডিউলটির জন্য ডাকা প্রথম ফাংশনের শুরু এবং শেষ ফাংশন শেষে put

অবশ্যই আপনার প্রতিটি ফাংশন বহিরাগত ডিবিতে সম্পাদন করা উচিত এবং কোনও কিছুই পিছনে স্যুইচ না করে ডিফল্ট ডাটাবেসটি জিজ্ঞাসা করতে হবে না।

এই নিম্নলিখিত কোডটি ব্যর্থ হবে:

db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

$node = node_load(123); //This would fail on the external DB.

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 

আপনার পিছনে পিছনে স্যুইচ করা উচিত:

db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 
$node = node_load(123); //Query made on the default Drupal DB.
db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 

2
ব্যাখ্যার জন্য ধন্যবাদ. আমি একটি পৃথক ফাংশন তৈরি করে শেষ করেছি যা আমার বাহ্যিক ডিবি db_set_active এর সাথে নির্বাচন করে এবং যদি এটি ব্যর্থ হয় তবে এটি ডিবি কনফিগারেশন যুক্ত করে এবং আবার চেষ্টা করে। এইভাবে আমি বাহ্যিক ক্যোয়ারী চালানোর আগে এটি বিভিন্ন হুকগুলিতে ব্যবহার করতে পারি, তবে আপনার নির্দেশ অনুসারে আমার আবার ডিফল্টটি সক্রিয় করা দরকার।
হুইস্কি

4

আপনি মধ্যে যোগ করতে হবে settings.phpএ অবস্থিত /sites/default/নিম্নলিখিত সিনট্যাক্স মধ্যে

// দ্রুপাল 6

$db_url['default'] = 'mysql://db_user:password@localhost/db_name';
$db_url['external'] = 'mysql://db_user2:password@localhost/db_name2';

// দ্রুপাল 7

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'db1',
      'username' => 'user1',
      'password' => 'pass',
      'host' => 'host1',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
  'extra' =>
  array (
    'default' =>
    array (
      'database' => 'db2',
      'username' => 'user2',
      'password' => 'pass',
      'host' => 'host2',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

এবং এই সেটিংসের পরে আপনি ডাটাবেসের মধ্যে স্যুইচ করতে db_set_active () ব্যবহার করতে পারেন।


ধন্যবাদ, আপনি এটি এইভাবে করতে পারেন, তবে আমি আমার মডিউলটির মধ্যে থেকে প্রশ্নটিতে লিঙ্ক করা পৃষ্ঠায় বর্ণিত হিসাবে এটি করতে বেছে নিয়েছি। এইভাবে আপনি প্রশাসক ব্যবহারকারীদের প্রশাসক সেটিং ফর্মটিতে তাদের নিজস্ব কনফিগারেশন পূরণ করতে পারেন have
হুইস্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.