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
相关产品推荐
相关产品推荐

