如何在codeigniter中将数据插入到其他数据库中

时间:2013-08-04 08:43:12

标签: mysql database codeigniter

我有一个要求我需要将数据插入到两个不同数据库的表中。

$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

错误

  

表'mydb.otherdb.table1'不存在

它不会忽略作为我的默认数据库的mydb ...
任何建议?

4 个答案:

答案 0 :(得分:5)

您必须定义第二组数据库参数。 CI不是为了真正拥有两个数据库连接而开发的,它更适用于交换测试和生产数据库。那说它周围有一些技巧。所以首先定义第二组DB信息,如下所示:

/* 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->other_db= $this->CI->load->database('forum', TRUE); 

使用$this->db访问dbase 1,使用$this->other_db访问dbase 2(或者您调用的任何内容)。

谢谢

答案 1 :(得分:1)

Codeigniter使用database.php配置文件中的设置在内部连接到数据库。您也使用与第一个db连接的相同db对象,它永远不会工作。

您可以有多种方法来执行此操作:

1)您可以使用Web服务。使用CI为其他数据库创建Web服务,并将数据发送到该Web服务。在Web服务端,将数据插入数据库表中。这是最好的使用方法,因为两个代码都是分开的,并且只能通过Web服务进行通信。您可以使用SOAP或REST Web服务。

2)您可以使用直接的PHP代码连接到其他数据库。使用mysqli连接到其他数据库并在平面PHP代码中运行查询。请注意,这样做,您将无法使用CI的任何数据库功能。

在我看来,如果第二个数据库上有很多数据库操作,第一个选项将是一件好事,否则使用第二个。

谢谢

答案 2 :(得分:1)

我得到了更好的解决方案。

    $dsn = 'mysql://user:password@localhost/db1';
    $this->db1 = $this->load->database($dsn, true);        
    $dsn = 'mysql://user:password@localhost/db2';
    $this->db2= $this->load->database($dsn, true);        
    $dsn = 'mysql://user:password@localhost/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);

答案 3 :(得分: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";

$ this-> load->数据库($ config,true); 像往常一样访问您的表而不使用数据库名称。 希望这能帮到你。 有关更多信息,请访问: http://ellislab.com/codeigniter/user-guide/database/connecting.html

有任何问题,请告诉我