You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Codeigniter v3中集成Medoo?v3.1.8版本配置咨询

CodeIgniter 3.1.8 集成 Medoo 完整指南(亲测可用)

我之前在CI3.1.8版本上折腾过Medoo的集成,踩过几个小坑,给你整理了完整的步骤和避坑方案,两种集成方式按需选就行:

一、先搞定Medoo的准备工作

先去Medoo官网下载对应PHP版本的库——CI3.1.8支持PHP5.6及以上,如果你服务器是PHP5.6,就选Medoo v1.x;PHP7.1+的话直接用最新的v2.x就行。解压后把核心的medoo.php文件单独拿出来备用。

二、两种集成方式,看你需求选

方式1:直接引入(快速测试/小型项目)

这种方式不用改CI的任何配置,适合临时测试或者小项目快速上手:

  1. 把medoo.php放到CI项目的application/libraries或者application/third_party目录(看你自己习惯放哪)。
  2. 在需要用的控制器/模型里直接引入并初始化,建议复用CI的数据库配置,避免重复写一遍:
// 先引入Medoo文件,路径根据你放的位置调整
require APPPATH . 'libraries/medoo.php';

class TestController extends CI_Controller {
    public function index() {
        // 拿CI的数据库配置,省得再写一遍账号密码
        $ci_db_config = $this->config->item('database');
        
        // 初始化Medoo
        $this->medoo = new Medoo([
            'database_type' => 'mysql',
            'database_name' => $ci_db_config['database'],
            'server' => $ci_db_config['hostname'],
            'username' => $ci_db_config['username'],
            'password' => $ci_db_config['password'],
            'charset' => $ci_db_config['char_set'],
            'port' => $ci_db_config['port'] ?? 3306,
            // 要是CI设置了表前缀,这里也加上,保持一致
            'prefix' => $ci_db_config['dbprefix']
        ]);

        // 测试一下查询,没问题的话就能正常用了
        $user_list = $this->medoo->select('users', ['id', 'nickname']);
        var_dump($user_list);
    }
}

方式2:作为CI库集成(规范推荐,全局可用)

如果是中大型项目,建议把Medoo做成CI的标准库,这样全局都能调用,更符合CI的开发习惯:

  1. 把medoo.php放到application/libraries目录。
  2. 在同一个目录下新建一个Medoo_lib.php文件(CI的库文件名首字母要大写,注意命名规则),内容如下:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

// 引入Medoo核心文件
require APPPATH . 'libraries/medoo.php';

class Medoo_lib extends Medoo {
    public function __construct() {
        // 拿到CI的全局实例,获取数据库配置
        $CI =& get_instance();
        $db_config = $CI->config->item('database');
        
        // 组装Medoo的配置,复用CI的配置项
        $medoo_config = [
            'database_type' => 'mysql',
            'database_name' => $db_config['database'],
            'server' => $db_config['hostname'],
            'username' => $db_config['username'],
            'password' => $db_config['password'],
            'charset' => $db_config['char_set'],
            'port' => $db_config['port'] ?? 3306,
            'prefix' => $db_config['dbprefix']
        ];
        
        // 调用Medoo的构造函数完成初始化
        parent::__construct($medoo_config);
    }
}
  1. 现在就可以在任何控制器/模型里轻松调用了:
class Home extends CI_Controller {
    public function __construct() {
        parent::__construct();
        // 加载Medoo库
        $this->load->library('medoo_lib');
        // 给个短别名,写起来更顺手
        $this->db_medoo =& $this->medoo_lib;
    }

    public function get_user_info() {
        // 用Medoo查数据,语法和CI的Active Record不一样,别搞混了
        $user = $this->db_medoo->get('users', ['id', 'email'], ['id' => 1]);
        print_r($user);
    }
}

三、解决你遇到的“无法协同工作”问题

我当时踩过的坑,大概率也是你遇到的问题:

  1. PHP版本不兼容:Medoo v2.x要求PHP7.1+,如果你的服务器还是PHP5.6,直接用v1.x版本就行,不然会报语法错误。
  2. 数据库连接冲突:别同时让CI原生DB和Medoo用不同的配置,尽量复用CI的配置,避免连接数超标或者事务冲突。
  3. 命名冲突:千万别把Medoo实例命名为$this->db,会直接覆盖CI原生的数据库对象,到时候想用CI的原生查询就傻了。
  4. 命名空间问题:如果用的是带命名空间的Medoo版本,记得在CI的文件里加上use Medoo\Medoo;,或者直接用全局类名初始化。

四、小提醒

  • 要是需要多数据库连接,直接在Medoo的初始化配置里单独指定就行,不用改CI的默认配置。
  • Medoo的查询语法和CI的Active Record差异不小,写的时候别搞混了,比如Medoo的插入是$this->medoo->insert('table', [...]),和CI的写法不一样。

内容的提问来源于stack exchange,提问作者Sid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:55:48