2012-06-27 15 views
5

मेरे पास कोडइग्निटर और कुछ MySQL डेटाबेस है। लेकिन मुझे पता है कि मैं काम करने के लिए एक और डेटाबेस सेट करना चाहता हूं, और कुछ क्रियाओं के बाद इसे अक्षम कर दें। उदाहरण के लिए, मैं समारोह make_some_actions_with_db() है, और अब मैं ऐसा ही कुछ करने की जरूरत है:कोडइग्निटर का उपयोग करके एक और डेटाबेस कैसे लोड करें?

public function action() 
{ 
//load db 
make_some_actions_with_db(); 
//disable db 
} 

तो, अब मुझे पता है कि कैसे मैं नया डिफ़ॉल्ट db सेट कर सकते हैं की जरूरत है और कैसे मैं एक और पहले सेट कर सकते हैं () डीबी। धन्यवाद।

UPDATED: यह काम नहीं करता है:

public function update_record_insert_test() 
    { 
     if ($this->facebook->getUser()) 
     { 
      $another_db_settings['hostname'] = 'localhost'; 
      $another_db_settings['username'] = 'root'; 
      $another_db_settings['password'] = ''; 
      $another_db_settings['database'] = 'name'; 
      $another_db_settings['dbdriver'] = "mysql"; 
      $another_db_settings['dbprefix'] = ""; 
      $another_db_settings['pconnect'] = TRUE; 
      $another_db_settings['db_debug'] = TRUE; 
      $another_db_settings['cache_on'] = FALSE; 
      $another_db_settings['cachedir'] = ""; 
      $another_db_settings['char_set'] = "utf8"; 
      $another_db_settings['dbcollat'] = "utf8_general_ci"; 
      $this->load->database($another_db_settings); 

      $_POST['id']='AccountPagesView.a_book/1000'; 
      $_POST['value']='test'; 
      $_POST['old_value']='not'; 
      $welcome=new Welcome(); 
      $welcome->update_record(); 
     } 
     else 
     { 
      $url=$this->facebook->getLoginUrl(array('next' => base_url().'update_record_insert_test')); 
      redirect($url); 
     } 
    } 

उत्तर

9

में अपने config/database.php अपने डेटाबेस 'डिफ़ॉल्ट' समूह के लिए कॉन्फ़िगर किया गया है, इसलिए जैसे:

$db['default']['hostname'] = 'host'; 
$db['default']['username'] = 'username'; 
$db['default']['password'] = 'password'; 
$db['default']['database'] = 'database'; 

यह आपको करने की अनुमति देता इस तरह के अन्य समूहों को निर्दिष्ट करें:

$db['second']['hostname'] = 'host'; 
$db['second']['username'] = 'username'; 
$db['second']['password'] = 'password'; 
$db['second']['database'] = 'database'; 

$db['third']['hostname'] = 'host'; 
$db['third']['username'] = 'username'; 
$db['third']['password'] = 'password'; 
$db['third']['database'] = 'database'; 

फिर आप का उपयोग करके एक और डेटाबेस से कनेक्ट कर सकते हैं:

$defaultDB = $this->load->database('default', TRUE); 
$secondDB = $this->load->database('second', TRUE); 

true दूसरा मूल्य के रूप में उत्तीर्ण होकर, यह डेटाबेस वस्तु वापस आ जाएगी, आप सुरक्षित रूप से प्रत्येक डेटाबेस के लिए एक ही तरीके का उपयोग करने की अनुमति है, तो जैसे:

$default->get('table'); 
$second->get('different_table'); 
+0

अन्य चर करने के लिए नए कनेक्शन आवंटित होगा अब मैं $ का उपयोग करके सभी अनुरोध करना इस-> db-> (मिल .. ।), और मैं इस कोड को नहीं बदल सकता, लेकिन एक ही टेबल के साथ एक ही डीबी है, मुझे इसे डिफ़ॉल्ट डीबी बदलने की जरूरत है। यह मेरे द्वारा कैसे हो सकता है? उदाहरण के लिए, अब मेरे पास "डीबी 1" डेटाबेस है, और दूसरा "db1_copy" है - मुझे इसकी आवश्यकता है कि यह अनुरोध $-> डीबी -> ... को "db1_copy" के साथ निष्पादित किया जाएगा। – user1477886

+0

यदि आप कॉन्फ़िगरेशन बदल सकते हैं, तो 'डिफ़ॉल्ट' समूह के विवरण 'db1_copy' के विवरण में बदलें। यह काम करना चाहिए? – cchana

+0

नहीं। मैंने अभी कोशिश की है और यह काम नहीं करता है। – user1477886

0

आप डिफ़ॉल्ट डेटाबेस कनेक्शन (जो मैं अनुशंसा नहीं करते) बदलना चाहते हैं आप कर सकते हैं:

$another_db_settings['hostname'] = ''; 
$another_db_settings['username'] = ''; 
$another_db_settings['password'] = ''; 
$another_db_settings['database'] = ''; 
$another_db_settings['dbdriver'] = "mysql"; 
$another_db_settings['dbprefix'] = ""; 
$another_db_settings['pconnect'] = TRUE; 
$another_db_settings['db_debug'] = TRUE; 
$another_db_settings['cache_on'] = FALSE; 
$another_db_settings['cachedir'] = ""; 
$another_db_settings['char_set'] = "utf8"; 
$another_db_settings['dbcollat'] = "utf8_general_ci"; 
$this->load->database($another_db_settings); 

तो नए डेटाबेस $ This-> डाटाबेस के माध्यम से पहुँचा जा सकता है, लेकिन मैं क्या cchana सुझाव की सिफारिश और के माध्यम से

$new_db = $this->load->database($another_db_settings, TRUE); 
+0

आपकी अनुशंसा काम नहीं करती है। कृपया अद्यतन प्रश्न की जांच करें। – user1477886

+0

क्या आप वेलकम क्लास दिखा सकते हैं? मुझे नहीं लगता कि आपको इस मामले में एक और डेटाबेस कनेक्शन क्यों चाहिए। वेलकम क्लास में – marshall

+0

update_record() फ़ंक्शन मुख्य डेटाबेस के साथ कुछ क्रिया करता है। मुझे इसका परीक्षण करने की ज़रूरत है, और मैं इसके लिए मुख्य डीबी की प्रतिलिपि बनाना चाहता हूं। – user1477886

संबंधित मुद्दे