1. Chuẩn bị môi trường
Trước khi bắt đầu, bạn cần đảm bảo:
- Đã cài đặt PHP 8.1 trở lên (khuyến nghị PHP 8.2+).
- Đã cài đặt MySQL 5.7+ hoặc MariaDB 10.3+.
- Đã cài đặt CodeIgniter 4 thông qua Composer hoặc tải trực tiếp từ trang chủ.
- Đã bật extension
mysqlihoặcpdo_mysqltrongphp.ini.
2. Cấu hình kết nối MySQL
CodeIgniter 4 lưu cấu hình kết nối cơ sở dữ liệu trong file app/Config/Database.php. Bạn có thể chỉnh sửa trực tiếp file này, hoặc sử dụng file .env để ghi đè cấu hình (khuyến nghị dùng cách này để bảo mật thông tin).
2.1. Cấu hình qua file .env (khuyến nghị)
Trong thư mục gốc của project, sao chép file env thành .env (nếu chưa có), sau đó mở file và bỏ comment các dòng sau:
database.default.hostname = localhost
database.default.database = my_database
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306
Giải thích các tham số:
- hostname: Địa chỉ máy chủ MySQL, thường là
localhosthoặc127.0.0.1. - database: Tên cơ sở dữ liệu bạn muốn kết nối.
- username: Tên tài khoản MySQL.
- password: Mật khẩu tương ứng.
- DBDriver: Trình điều khiển kết nối, có thể là
MySQLihoặcPostgre,SQLite3... - DBPrefix: Tiền tố bảng, ví dụ
ci_nếu bạn muốn tất cả bảng có tiền tố. - port: Cổng kết nối, mặc định MySQL là
3306.
2.2. Cấu hình trực tiếp trong Database.php
Nếu không dùng file .env, bạn có thể sửa trực tiếp mảng $default trong app/Config/Database.php:
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
public $defaultGroup = 'default';
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'my_database',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
}
Lưu ý: Giá trị trong file .env sẽ ghi đè giá trị trong Database.php, vì vậy bạn chỉ nên cấu hình ở một nơi để tránh nhầm lẫn.
3. Kiểm tra kết nối
Sau khi cấu hình, bạn có thể kiểm tra kết nối bằng cách tạo một controller đơn giản:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class DbTest extends Controller
{
public function index()
{
$db = \Config\Database::connect();
if ($db->connect()) {
echo 'Kết nối MySQL thành công!';
} else {
echo 'Kết nối thất bại!';
}
}
}
Truy cập đường dẫn tương ứng để kiểm tra. Nếu thành công, bạn đã sẵn sàng thao tác với dữ liệu.
4. Các cách sử dụng MySQL trong CodeIgniter 4
4.1. Sử dụng Query Builder
Query Builder giúp bạn xây dựng truy vấn bằng các phương thức, hạn chế việc viết SQL thuần và tăng tính bảo mật.
<?php
$db = \Config\Database::connect();
// Lấy tất cả bản ghi trong bảng users
$users = $db->table('users')->get()->getResult();
// Lấy một bản ghi theo điều kiện
$user = $db->table('users')->where('id', 1)->get()->getRow();
// Thêm bản ghi mới
$data = [
'name' => 'Nguyễn Văn A',
'email' => 'a@example.com',
];
$db->table('users')->insert($data);
// Cập nhật bản ghi
$db->table('users')->where('id', 1)->update(['name' => 'Nguyễn Văn B']);
// Xóa bản ghi
$db->table('users')->where('id', 1)->delete();
4.2. Sử dụng Model
Model là lớp trung gian giúp bạn thao tác với một bảng cụ thể. Đây là cách được khuyến nghị trong các dự án thực tế.
Tạo file app/Models/UserModel.php:
<?php
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
protected $table = 'users';
protected $primaryKey = 'id';
protected $allowedFields = ['name', 'email', 'password'];
protected $useTimestamps = true;
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
}
Sử dụng Model trong controller:
<?php
namespace App\Controllers;
use App\Models\UserModel;
class User extends BaseController
{
public function index()
{
$model = new UserModel();
// Lấy tất cả người dùng
$users = $model->findAll();
// Lấy một người dùng theo id
$user = $model->find(1);
// Thêm người dùng mới
$model->insert([
'name' => 'Trần Thị C',
'email' => 'c@example.com',
]);
// Cập nhật
$model->update(1, ['name' => 'Trần Thị D']);
// Xóa
$model->delete(1);
// Trả về view
return view('users/index', ['users' => $users]);
}
}
4.3. Truy vấn SQL thuần
Khi cần các truy vấn phức tạp, bạn vẫn có thể viết SQL thuần thông qua phương thức query():
<?php
$db = \Config\Database::connect();
// Truy vấn có tham số (chống SQL Injection)
$sql = "SELECT * FROM users WHERE email = ?";
$query = $db->query($sql, ['a@example.com']);
$user = $query->getRow();
// Truy vấn không tham số
$query = $db->query("SELECT COUNT(*) AS total FROM users");
$row = $query->getRow();
echo $row->total;
4.4. Sử dụng nhiều kết nối cơ sở dữ liệu
CodeIgniter 4 hỗ trợ nhiều nhóm kết nối. Bạn có thể khai báo thêm trong Database.php:
public $secondDb = [
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'another_database',
'DBDriver' => 'MySQLi',
'port' => 3306,
];
Và gọi bằng:
$db2 = \Config\Database::connect('secondDb');
$data = $db2->table('products')->get()->getResult();
5. Một số lưu ý quan trọng
- Luôn đặt
DBDebugthànhfalsekhi triển khai production để tránh lộ thông tin lỗi. - Sử dụng
utf8mb4làm charset để hỗ trợ đầy đủ tiếng Việt và emoji. - Nên dùng Model thay vì Query Builder thuần cho các thao tác CRUD để code gọn gàng và dễ bảo trì.
- Không lưu thông tin đăng nhập trực tiếp trong
Database.phpnếu đẩy code lên Git; hãy dùng file.envvà thêm vào.gitignore. - Đối với truy vấn có tham số người dùng nhập, luôn dùng binding (
?) để phòng chống SQL Injection.
6. Kết luận
Việc cấu hình và sử dụng MySQL trong CodeIgniter 4 rất linh hoạt, từ Query Builder, Model cho đến SQL thuần. Tùy vào quy mô và yêu cầu dự án, bạn có thể chọn cách tiếp cận phù hợp. Với các dự án thực tế, việc kết hợp Model và Query Builder thường mang lại hiệu quả cao nhất về cả tốc độ phát triển lẫn khả năng bảo trì.
Chúc bạn cấu hình thành công và khai thác hiệu quả sức mạnh của CodeIgniter 4 cùng MySQL!

