2011-11-25 29 views
34

मुझे मास्टर डेटाबेस से एक MySQL डेटाबेस जानकारी पुनर्प्राप्त करना है और फिर उस डेटाबेस से कनेक्ट करना है, और कुछ रिकॉर्ड प्राप्त करना है।कोडनिर्देशक - एकाधिक डेटाबेस कनेक्शन

मेरा मतलब है कि एक डेटाबेस धारण करना मैं एक और डेटाबेस लोड करना चाहता हूं।

क्या यह कोडनिर्देशक के साथ संभव है? अभी मैं अपने मॉडल में कोड की निम्नलिखित पंक्तियों का उपयोग कर रहा हूं।

function connectDb($credential) 
{ 

    $config['hostname'] = $credential['server']; 
    $config['username'] = $credential['username']; 
    $config['password'] = $credential['password']; 
    $config['database'] = $credential['database']; 
    $config['dbdriver'] = "mysql"; 
    $config['dbprefix'] = ""; 
    $config['pconnect'] = FALSE; 
    $config['db_debug'] = TRUE; 
    $config['cache_on'] = FALSE; 
    $config['cachedir'] = ""; 
    $config['char_set'] = "utf8"; 
    $config['dbcollat'] = "utf8_general_ci"; 

    $DB2=$this->load->database($config); 

    $DB2->db->select('first_name,last_name'); 
    $query = $DB2->db->get('person'); 
    print_r($query); 

} 

यह काम नहीं कर रहा है क्या कोई और तरीका है?

+0

परिभाषित करें "काम नहीं कर रहा" –

उत्तर

60

आप `आवेदन/config/database.php' default डेटाबेस समूह

आम तौर पर, आप स्थापित करेगा में दूसरा डेटाबेस में जानकारी प्रदान करना चाहिए, ताकि जैसे:

$db['default']['hostname'] = "localhost"; 
$db['default']['username'] = "root"; 
$db['default']['password'] = ""; 
$db['default']['database'] = "database_name"; 
$db['default']['dbdriver'] = "mysql"; 
$db['default']['dbprefix'] = ""; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = FALSE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ""; 
$db['default']['char_set'] = "utf8"; 
$db['default']['dbcollat'] = "utf8_general_ci"; 
$db['default']['swap_pre'] = ""; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

सूचना है कि प्रवेश जानकारी और सेटिंग्स $db['default'] नामक सरणी में प्रदान की जाती हैं।

फिर आप एक नई सरणी में एक और डेटाबेस जोड़ सकते हैं - चलिए इसे 'अन्य डीबी' कहते हैं।

$db['otherdb']['hostname'] = "localhost"; 
$db['otherdb']['username'] = "root"; 
$db['otherdb']['password'] = ""; 
$db['otherdb']['database'] = "other_database_name"; 
$db['otherdb']['dbdriver'] = "mysql"; 
$db['otherdb']['dbprefix'] = ""; 
$db['otherdb']['pconnect'] = TRUE; 
$db['otherdb']['db_debug'] = FALSE; 
$db['otherdb']['cache_on'] = FALSE; 
$db['otherdb']['cachedir'] = ""; 
$db['otherdb']['char_set'] = "utf8"; 
$db['otherdb']['dbcollat'] = "utf8_general_ci"; 
$db['otherdb']['swap_pre'] = ""; 
$db['otherdb']['autoinit'] = TRUE; 
$db['otherdb']['stricton'] = FALSE; 

अब, वास्तव में दूसरे डेटाबेस का उपयोग करने के लिए, आप एक और variabel है कि आप अपने मॉडल में उपयोग कर सकते हैं करने के लिए कनेक्शन भेजना है:

function my_model_method() 
{ 
    $otherdb = $this->load->database('otherdb', TRUE); // the TRUE paramater tells CI that you'd like to return the database object. 

    $query = $otherdb->select('first_name, last_name')->get('person'); 
    var_dump($query); 
} 

कि यह करना चाहिए। विभिन्न डेटाबेस को जोड़ने के लिए प्रलेखन यहां पाया जा सकता: http://codeigniter.com/user_guide/database/connecting.html

+0

मैं कोशिश करूंगा, धन्यवाद – zamebit

6

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

$DB2=$this->load->database($config); 

जब आप डेटाबेस ऑब्जेक्ट को पुनर्प्राप्त करना चाहते हैं, आपको दूसरे तर्क में TRUE पास करना होगा।

Codeigniter User Guide से

:

समारोह डेटाबेस वस्तु वापस आ जाएगी सही (बुलियन) के लिए दूसरा पैरामीटर की स्थापना करके।

तो, अपने कोड के बजाय होना चाहिए:

$DB2=$this->load->database($config, TRUE); 

यह काम कर देगा कि।

+1

मैंने कोशिश की लेकिन यह काम नहीं किया :( –

8

इसका उपयोग करें।

$dsn1 = 'mysql://user:[email protected]/db1'; 
$this->db1 = $this->load->database($dsn1, true);  

$dsn2 = 'mysql://user:[email protected]/db2'; 
$this->db2= $this->load->database($dsn2, true);  

$dsn3 = 'mysql://user:[email protected]/db3'; 
$this->db3= $this->load->database($dsn3, true); 

प्रयोग

$this->db1 ->insert('tablename', $insert_array); 
$this->db2->insert('tablename', $insert_array); 
$this->db3->insert('tablename', $insert_array); 
+0

हैलो सर, क्या आप कृपया बता सकते हैं कि हमने सरल उदाहरण के साथ उपयोगकर्ता नाम, पासवर्ड, डेटाबेस नाम दिया है, क्या हम दे सकते हैं मॉडल संरचना में यह कनेक्शन। – whoami

+0

उपयोगकर्ता = उपयोगकर्ता नाम, पासवर्ड = पासवर्ड, डीबी 1 = डाटाबेसनाम, लोकलहोस्ट = होस्टनाम – Rayiez

9

सबसे अच्छा तरीका अलग डेटाबेस समूहों का उपयोग करने के लिए है। यदि आप सामान्य डेटाबेस ($ this-> डीबी) के रूप में मास्टर डेटाबेस का उपयोग करना जारी रखना चाहते हैं तो अपने माध्यमिक डेटाबेस में लगातार कनेक्शन कॉन्फ़िगरेशन विकल्प बंद करें।केवल मास्टर डेटाबेस लगातार कनेक्शन साथ काम करना चाहिए:

मास्टर डेटाबेस

$db['default']['hostname'] = "localhost"; 
$db['default']['username'] = "root"; 
$db['default']['password'] = ""; 
$db['default']['database'] = "database_name"; 
$db['default']['dbdriver'] = "mysql"; 
$db['default']['dbprefix'] = ""; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = FALSE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ""; 
$db['default']['char_set'] = "utf8"; 
$db['default']['dbcollat'] = "utf8_general_ci"; 
$db['default']['swap_pre'] = ""; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

माध्यमिक डेटाबेस (नोटिस pconnect गलत पर सेट है) डेटाबेस के रूप में वस्तुओं

$db['otherdb']['hostname'] = "localhost"; 
$db['otherdb']['username'] = "root"; 
$db['otherdb']['password'] = ""; 
$db['otherdb']['database'] = "other_database_name"; 
$db['otherdb']['dbdriver'] = "mysql"; 
$db['otherdb']['dbprefix'] = ""; 
$db['otherdb']['pconnect'] = FALSE; 
$db['otherdb']['db_debug'] = FALSE; 
$db['otherdb']['cache_on'] = FALSE; 
$db['otherdb']['cachedir'] = ""; 
$db['otherdb']['char_set'] = "utf8"; 
$db['otherdb']['dbcollat'] = "utf8_general_ci"; 
$db['otherdb']['swap_pre'] = ""; 
$db['otherdb']['autoinit'] = TRUE; 
$db['otherdb']['stricton'] = FALSE; 

तो फिर तुम माध्यमिक डेटाबेस का उपयोग कर सकते सामान्य रूप से मास्टर डेटाबेस का उपयोग करते समय:

// use master dataabse 
$users = $this->db->get('users'); 

// connect to secondary database 
$otherdb = $this->load->database('otherdb', TRUE); 
$stuff = $otherdb->get('struff'); 
$otherdb->insert_batch('users', $users->result_array()); 

// keep using master database as usual, for example insert stuff from other database 
$this->db->insert_batch('stuff', $stuff->result_array()); 
+0

मेरे पास कोडइग्निटर अनुप्रयोगों में एकाधिक डेटाबेस कनेक्शन बनाने के बारे में लेख लिखना है। कृपया एक नज़र डालें और अपने सुझाव दें https://www.cloudways.com/blog/connect-multiple- डेटाबेस-codeigniter/ –

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