2013-08-04 95 views
1

我有一個要求,我需要將數據插入到不同的數據庫中的兩個表..如何將數據插入到其它數據庫中笨

$insert_query = 'INSERT INTO table1 (col1, col2) values(1, 2)'; 
$insert_otherdb_query= 'INSERT INTO otherdb.table1 (col1, col2) values(1, 2)'; 
$this->db->query($insert_query); //works fine 
$this->db->query($insert_otherdb_query); //doesn't work 

錯誤

Table 'mydb.otherdb.table1' doesn't exist

它不會忽略mydb這是我的默認數據庫...
任何suggesstions?

回答

1

我得到了一個更好的解決方案。

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

用法

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

Codeigniter使用database.php配置文件中的設置在內部連接到數據庫。你也使用與第一個數據庫有連接的相同的數據庫對象,它永遠不會工作。

您可能有多個選項來執行此操作:

1)您可以使用Web服務。使用CI爲其他數據庫創建Web服務並將數據發送到該Web服務。在web服務端,將數據插入數據庫表中。這是最好的使用方式,因爲兩個代碼是分開的,並且通信只能由Web服務完成。您可以使用SOAP或REST Web服務。

2)您可以使用直接的php代碼連接到其他數據庫。使用mysqli連接到其他數據庫並在平面PHP代碼中運行您的查詢。請注意,這樣做,您將無法使用CI的任何數據庫功能。

在我看來,如果第二個數據庫有很多數據庫操作,第一個選項將是一件好事,否則使用第二個選項。

謝謝

4

您必須定義第二組數據庫參數。雖然CI沒有發展到真正擁有兩個數據庫連接,但更多的是交換測試和生產數據庫。這表示圍繞它有一些技巧。因此,首先定義第二組數據庫信息,如下所示:

/* FORUM */ 
$active_group = "forum"; 
$active_record = TRUE; 

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

/* TEST SITE */ 
$active_group = "default"; 
$active_record = TRUE; 

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

您的活動數據庫將是您定義的最後一個數據庫。

一旦你完成了這個,你可以手動連接到第二個(或者如果你總是需要的話,把它放在MY_Controller中)。與$this->db和dBASE 2 $this->other_db(或任何你把它叫做)

$this->other_db= $this->CI->load->database('forum', TRUE); 

訪問數據庫經1:然後您可以載入你的第二個數據庫,像這樣。

謝謝

+0

致命錯誤:調用一個成員功能數據庫()在C語言的非對象:\ XAMPP \ htdocs中\ mysite的\應用\控制器\在線路34上site.php – Rayiez

+0

工程Gr8。謝謝! – Rayiez

0

要手動連接到所需的數據庫可以傳遞值的數組:

$config['hostname'] = "localhost"; 
$config['username'] = "myusername"; 
$config['password'] = "mypassword"; 
$config['database'] = "mydatabase"; 
$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"; 

$這 - >負載>數據庫($配置,TRUE); 像往常一樣訪問您的表,而不使用數據庫名稱。 希望這對你有所幫助。 欲瞭解更多信息,請訪問: http://ellislab.com/codeigniter/user-guide/database/connecting.html

任何問題,讓我知道

相關問題