Codeigniter中调用非默认MySQL数据库storesDB获取数据失败原因排查
问题
在CodeIgniter框架中尝试从非默认MySQL数据库storesDB获取数据,在模型方法中添加了$this->load->database('storesDB', TRUE);语句,但执行后仍从默认数据库取数,模型代码如下:
public function getEquipment($id = null) { $this->load->database('storesDB', TRUE); $this->db->select('*'); $this->db->from('tbl_equipment'); $this->db->join('tbl_equipment_category', 'tbl_equipment.eq_cat=tbl_equipment_category.id_cat'); $this->db->where("tbl_equipment.status", '1'); if ($id) $this->db->where("tbl_equipment.id", $id); $query = $this->db->get(); return $query->result(); }
请问可能的原因是什么?
可能的原因及解决办法
- 未接收新数据库连接实例:调用
$this->load->database('storesDB', TRUE);时,第二个参数TRUE会返回一个新的数据库连接对象,而非替换默认的$this->db。你当前没有将这个新对象赋值给变量,后续操作依然使用默认的$this->db连接,自然还是从默认数据库取数。
修正方式:将新连接赋值给变量,后续所有数据库操作都使用该变量:public function getEquipment($id = null) { $stores_db = $this->load->database('storesDB', TRUE); $stores_db->select('*'); $stores_db->from('tbl_equipment'); $stores_db->join('tbl_equipment_category', 'tbl_equipment.eq_cat=tbl_equipment_category.id_cat'); $stores_db->where("tbl_equipment.status", '1'); if ($id) $stores_db->where("tbl_equipment.id", $id); $query = $stores_db->get(); return $query->result(); } storesDB配置有误:检查application/config/database.php中storesDB的配置项,确认数据库名称、用户名、密码、主机地址是否与实际的storesDB完全匹配,注意MySQL在部分系统下数据库名区分大小写,避免拼写错误。- 配置缓存未更新:如果之前修改过数据库配置但未清空缓存,CodeIgniter可能仍在使用旧配置。可以删除
application/cache目录下的缓存文件,或重启PHP服务让新配置生效。 - 重复加载连接导致冲突:如果模型或控制器中之前已加载过默认数据库连接,且未正确隔离新连接,可能导致后续操作仍走默认连接。确保在方法开头就获取新连接,且全程使用该连接对象执行操作。
内容的提问来源于stack exchange,提问作者MCIT Trends
相关产品推荐
相关产品推荐

