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

CodeIgniter报错Call to undefined method MySQLi\Connection::select()如何解决

报错原因
  • \Config\Database::connect() 返回的是数据库连接实例,而 select()、from()、join() 均为CodeIgniter查询构造器类的方法,连接实例本身不包含这些方法,直接调用就会触发未定义方法报错。
  • 你没有先初始化查询构造器对象,就直接用连接实例调用查询相关方法,是错误的核心原因。
解决方案

你需要先调用连接实例的 table() 方法获取查询构造器对象,再调用查询方法即可,修正后的Model层代码如下:

public function join()
{
    $db = \Config\Database::connect();
    $session = \Config\Services::session();
    $id = $session->get('id');

    // 先通过table()获取查询构造器,再链式调用所有查询方法
    $query = $db->table('subject_tbl')
                ->select('subject_tbl.subject, mark_tbl.mark')
                ->join('mark_tbl', 'mark_tbl.sub_id = subject_tbl.sub_id')
                ->where('mark_tbl.id', $id)
                ->get();
    // CI4中对应CI3的result()方法为getResult(),按需也可调用getResultArray()返回数组格式
    return $query->getResult();
}

可选优化写法

如果你的自定义Model已经继承了框架的 CodeIgniter\Model 基类,还可以省略手动获取数据库连接的步骤,写法更简洁:

// 在Model类的属性中先声明对应操作的表名
protected $table = 'subject_tbl';

public function join()
{
    $session = \Config\Services::session();
    $id = $session->get('id');

    return $this->builder()
                ->select('subject_tbl.subject, mark_tbl.mark')
                ->join('mark_tbl', 'mark_tbl.sub_id = subject_tbl.sub_id')
                ->where('mark_tbl.id', $id)
                ->get()
                ->getResult();
}

Controller层代码无需调整,修改Model层后即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:36:03