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

错误

表“mydb.otherdb.table1”不存在

它不会忽略 mydb 这是我的默认数据库...
有什么建议吗?

4

4 回答 4

5

您必须定义第二组数据库参数。尽管 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->other_db= $this->CI->load->database('forum', TRUE); 

用 dbase 1$this->db和 dbase 2 用$this->other_db(或任何你叫它的名字)访问。

谢谢你

于 2013-08-04T09:04:08.910 回答
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);
于 2013-09-01T11:23:56.610 回答
1

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

您可能有多种选择来执行此操作:

1)您可以使用网络服务。使用 CI 为其他数据库创建 Web 服务并将数据发送到该 Web 服务。在 web 服务端,将数据插入数据库表中。这是最好的使用方式,因为两个代码是分开的,并且通信仅由 Web 服务完成。您可以使用 SOAP 或 REST Web 服务。

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

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

谢谢

于 2013-08-04T08:56:02.240 回答
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->database($config, true); 像往常一样访问您的表,而不使用数据库名称。希望这对您有所帮助。欲了解更多信息,请访问: http ://ellislab.com/codeigniter/user-guide/database/connecting.html

有什么问题请告诉我

于 2013-08-05T06:22:55.217 回答