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

CodeIgniter中如何指定数据库名与表名查询并获取MySQL记录

如何在CodeIgniter Model中正确查询指定数据库和表的数据?

咱们先梳理下你现有代码里的几个问题,再给出规范的实现方式:

原代码的问题点

  • MySQL关键字冲突:database是MySQL的保留关键字,直接在WHERE条件里用会触发SQL语法错误,必须用反引号`包裹。
  • 拼写错误:foraech应该是foreach,这个语法错误会直接导致代码运行失败。
  • 违反MVC规范:在Model里直接用echo输出内容是不合适的,Model的职责是获取并返回数据,输出逻辑应该交给Controller和View来处理。
  • 数组遍历问题:result_array()返回的是二维数组,每个$value都是一条记录的关联数组,直接输出$value只会显示Array,需要遍历字段或者指定具体字段名。

正确实现方式

方式一:SQL语句中直接指定数据库和表(处理关键字)

修正后的Model代码,只负责查询并返回数据:

<?php 
class mod extends CI_Model { 
    public function get_brecht_data() { 
        // 用反引号包裹关键字`database`,避免语法错误
        $query = $this->db->query("SELECT * FROM db1.table1 WHERE `database` = 'db1'"); 
        // 返回查询结果的二维数组
        return $query->result_array(); 
    } 
} 
?>

然后在Controller中调用Model,并把数据传递给View:

<?php
class YourController extends CI_Controller {
    public function index() {
        $this->load->model('mod');
        // 获取数据
        $data['records'] = $this->mod->get_brecht_data();
        // 传递数据到View
        $this->load->view('your_view', $data);
    }
}
?>

最后在View(your_view.php)中遍历输出:

<?php foreach($records as $key => $row): ?>
    <p>记录索引:<?php echo $key; ?></p>
    <p>字段1值:<?php echo $row['字段名1']; ?></p>
    <p>字段2值:<?php echo $row['字段名2']; ?></p>
    <!-- 按需输出其他字段 -->
<?php endforeach; ?>

方式二:用CodeIgniter的数据库切换方法(更符合框架规范)

如果你的项目配置了多个数据库连接,也可以用db_select()方法切换到目标数据库,这样SQL里不需要写数据库名:

<?php 
class mod extends CI_Model { 
    public function get_brecht_data() { 
        // 切换到db1数据库
        $this->db->db_select('db1');
        // 直接查询表,不用加数据库前缀
        $query = $this->db->get_where('table1', ['`database`' => 'db1']);
        return $query->result_array(); 
    } 
} 
?>

这种方式利用了CodeIgniter的Active Record类,能自动处理SQL转义,更安全也更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:40:01