codeigniter支持同时连接sqlite和mysql,需在database.php中配置多个数据库组(如mysql_db、sqlite_db),分别指定对应dbdriver,并在model中显式加载不同实例;但不支持跨库事务与自动驱动切换。

可以,CodeIgniter 支持同时连接 SQLite 和 MySQL,但需注意:它本身不提供“自动双数据源事务管理”或“运行时动态切换驱动”的开箱即用能力,必须通过手动配置多个数据库组 + 显式加载来实现。
多库配置基础:定义不同驱动的连接组
在 application/config/database.php 中,每个数据库连接组(如 default、sqlite_db、mysql_db)可独立指定 dbdriver,因此能混用不同驱动:
-
'dbdriver' => 'mysqli'对应 MySQL(推荐改用mysqlit或pdo_mysql) -
'dbdriver' => 'sqlite3'对应 SQLite3(需 PHP 启用sqlite3扩展) - SQLite 连接只需
'database' => '/path/to/app.db',无需 hostname/password
实际配置示例
以下是一个可行的三组配置片段(含注释):
$db['mysql_db'] = array( 'dsn' => '', 'hostname' => '127.0.0.1', 'username' => 'root', 'password' => 'pass', 'database' => 'myapp_prod', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => TRUE, 'char_set' => 'utf8mb4', 'dbcollat' => 'utf8mb4_unicode_ci' ); $db['sqlite_db'] = array( 'dsn' => '', 'hostname' => '', // SQLite 不使用 'username' => '', // 忽略 'password' => '', // 忽略 'database' => WRITEPATH . 'cache/app_data.db', // 推荐放可写目录 'dbdriver' => 'sqlite3', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => TRUE, 'char_set' => '', 'dbcollat' => '' );
在 Model 中按需加载对应库
不能共用同一个 $this->db 实例。必须分别加载并赋值给不同属性:
$this->mysql_db = $this->load->database('mysql_db', TRUE);$this->sqlite_db = $this->load->database('sqlite_db', TRUE);- 后续操作调用
$this->mysql_db->get()或$this->sqlite_db->insert()
注意:TRUE 参数表示返回 DB 对象而非单例,避免覆盖冲突。
关键限制与注意事项
CodeIgniter 的 Query Builder 在不同驱动间行为有差异,需谨慎处理:
- SQLite 不支持
INSERT ... ON DUPLICATE KEY UPDATE,MySQL 支持 - SQLite 的
datetime类型处理较弱,建议统一用 TEXT 存 ISO8601 字符串 - 事务跨库无效——不能在一个事务中同时提交 MySQL 和 SQLite 操作
- 迁移(migration)功能仅对当前激活组生效,无法跨驱动批量执行











