本教程面向 CI 初學者,以最精簡的步驟演示如何在 CodeIgniter 3.x 中完成「控制器-模型-視圖」分層,實現從 MySQL 讀取用戶列表並顯示。所有代碼經測試可直接運行。
application/config/database.php,配置數據庫連線:$db['default'] = [
'hostname' => 'localhost',
'username' => 'your_username',
'password' => 'your_password',
'database' => 'your_db_name',
'dbdriver' => 'mysqli', // 推薦 mysqli
'char_set' => 'utf8mb4',
'dbcollat' => 'utf8mb4_general_ci',
];
CREATE TABLE `users` (
`id` INT(8) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) CHARACTER SET utf8mb4 DEFAULT NULL,
`age` VARCHAR(3) CHARACTER SET utf8mb4 DEFAULT NULL,
`sex` VARCHAR(2) CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `users` (`name`, `age`, `sex`) VALUES
('張三', '25', '男'),
('李四', '30', '女'),
('王五', '28', '男');
文件:application/models/Mtest.php
<?php
class Mtest extends CI_Model {
public function __construct() {
parent::__construct(); // 必須調用
$this->load->database(); // 載入數據庫庫,或在 autoload.php 中自動載入
}
// 獲取最新 10 條用戶
public function get_last_ten_entries() {
// 防止中文亂碼(若數據庫非 utf8mb4 可加此行)
// $this->db->query('SET NAMES utf8mb4');
$query = $this->db->get('users', 10); // 等同 SELECT * FROM users LIMIT 10
return $query->result(); // 返回對象陣列
}
}
提示:若在 application/config/autoload.php 的 $autoload['libraries'] 加入 'database',則無需每個模型手動 $this->load->database()。
文件:application/controllers/Test.php
<?php
class Test extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$this->load->helper('form'); // 載入表單輔助函數(可選)
$data['title'] = '首頁';
$data['headline'] = '用戶列表示例';
$data['todo_list'] = ['掃除', '打電話', '跑腿']; // 普通陣列示例
$this->load->model('mtest'); // 載入模型
$data['query1'] = $this->mtest->get_last_ten_entries(); // 調用模型方法
$this->load->view('users', $data); // 載入視圖並傳遞數據
}
}
文件:application/views/users.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><?= $title ?></title>
</head>
<body>
<h2><?= $headline ?></h2>
<h3>待辦事項 (foreach 遍歷普通陣列)</h3>
<ul>
<?php foreach ($todo_list as $item): ?>
<li><?= $item ?></li>
<?php endforeach; ?>
</ul>
<h3>用戶列表 (foreach 遍歷對象陣列)</h3>
<ul>
<?php foreach ($query1 as $user): ?>
<li>ID: <?= $user->id ?> | 姓名: <?= $user->name ?> | 年齡: <?= $user->age ?> | 性別: <?= $user->sex ?></li>
<?php endforeach; ?>
</ul>
<p>總共 <?= count($query1) ?> 條記錄</p>
</body>
</html>
| 現象 | 原因與解決 |
|---|---|
| 頁面空白/報錯 | 檢查 parent::__construct() 是否漏寫;模型類名/文件名需首字母大寫(Mtest.php / class Mtest)。 |
| 中文亂碼 | 確保:資料表 CHARSET=utf8mb4、database.php 設 char_set=utf8mb4、視圖 <meta charset="utf-8">。 |
| 找不到模型 | CI 3.x 類名必須 ucfirst,文件名同類名;$this->load->model('mtest') 區分大小寫。 |
| SQL 錯誤 | 開啟 $db['default']['debug'] = TRUE; 顯示詳細錯誤;或用 $this->db->last_query() 打印 SQL。 |
$this->db->query('SELECT * FROM users WHERE age > ?', [25]) 執行自定義 SQL 並防注入。autoload.php 啟用 'database' 實現全局自動連接。MY_Model 基類封裝通用 CRUD,減少重複代碼。完成以上步驟,你已掌握 CI 框架最核心的 MVC 流程。建議嘗試新增「添加用戶」功能:Controller 接收 POST → Model 執行 $this->db->insert() → 重定向列表頁,以鞏固理解。