首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

CodeIgniter 入門實戰:從零構建 MVC 數據庫查詢完整流程

     編輯:PHP 相關知識

CodeIgniter 入門實戰:從零構建 MVC 數據庫查詢完整流程

本教程面向 CI 初學者,以最精簡的步驟演示如何在 CodeIgniter 3.x 中完成「控制器-模型-視圖」分層,實現從 MySQL 讀取用戶列表並顯示。所有代碼經測試可直接運行。

第一步:下載與基礎配置

  1. 官網下載 CI 3.x 穩定版,解壓至 Web 根目錄。
  2. 編輯 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', '男');

第三步:實現 Model (M) - 數據訪問層

文件: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()。

第四步:實現 Controller (C) - 業務調度層

文件: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); // 載入視圖並傳遞數據
    }
}

第五步:實現 View (V) - 表現層

文件: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() → 重定向列表頁,以鞏固理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved