12/08/2018, 11:57

Tìm hiểu về Database class trong CI (phần 1)

Tổng Quan CI cung cấp cho người phát triển một class để giúp chúng ta dễ dàng hơn trong việc thao tác với cơ sở dữ liệu đó chính là database class. Database class có đầy đủ tính năng - "full-featured", nó hỗ trợ cả câu lệnh truy vấn truyền thống và Active Record. Các chức năng mà database ...

databaseManagement.jpg

Tổng Quan

CI cung cấp cho người phát triển một class để giúp chúng ta dễ dàng hơn trong việc thao tác với cơ sở dữ liệu đó chính là database class. Database class có đầy đủ tính năng - "full-featured", nó hỗ trợ cả câu lệnh truy vấn truyền thống và Active Record. Các chức năng mà database class cung cấp tương đối rõ ràng, cú pháp đơn giản.

Cấu hình database

CI cung cấp cho bạn một file config cho phép lưu trữ thông tin kết nối đến database của bạn (username, password, host ....) . File config là database.php (các bạn có thể truy cập theo đường dẫn: application/config/database.php ) bạn có thể cấu hình kết nối đến nhiều môi trường phát triển tương ứng (dev, test, production...).

Toàn bộ thông tin cấu hình được lưu trữ vào một mảng nhiều chiều, dưới đây là những thông tin config hay được sử dụng:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Lý do cho việc sử dụng mảng nhiều chiều để config thông tin kết nối đến database là nó dễ dàng cho phép bạn tùy chọn để lưu trữ thông tin kết nối đến nhiều database. Bạn đang phát triển và ứng dụng phải chạy trên nhiều môi trường chúng ta sẽ phải thay đổi thông tin kết nối database tương ứng cho từng môi trường (deverlopment, production, test, etc.) một cách đơn giản để giải quyết vấn đề này là thiết lập nhiều thông tin kết nối cho những môi trường khác nhau và tùy vào môi trường đang chạy mà hệ thống sẽ lấy thông tin config tương ứng. VD: Môi trường "test" - test environment

$db['framgia']['hostname'] = "localhost";
$db['framgia']['username'] = "root";
$db['framgia']['password'] = "";
$db['framgia']['database'] = "database_name";
$db['framgia']['dbdriver'] = "mysql";
$db['framgia']['dbprefix'] = "";
$db['framgia']['pconnect'] = TRUE;
$db['framgia']['db_debug'] = FALSE;
$db['framgia']['cache_on'] = FALSE;
$db['framgia']['cachedir'] = "";
$db['framgia']['char_set'] = "utf8";
$db['framgia']['dbcollat'] = "utf8_general_ci";
$db['framgia']['swap_pre'] = "";
$db['framgia']['autoinit'] = TRUE;
$db['framgia']['stricton'] = FALSE;

Sau khi đã thiết lập kết nối cho những môi trường khác thì bạn chỉ cần thiết lập trên hệ thống như sau, ví dụ cho môi trường test - "framgia"

$active_group = "framgia";

Note: "default" sẽ được hệ thống lấy làm thông tin kết nối mặc định khi có nhiều thông tin connect db Tên môi trường là do bạn tự định nghĩa

Active Record

**Active Record class trên toàn hệ thống được kích hoạt hoặc vô hiệu hóa bằng cách thiết lập giá trị cho biến $$ctive_record bằng TRUE hoặc FALSE. **

$active_record = TRUE; //enable
/* $active_record = FALSE; //disable */

Mặc định thì hệ thống sẽ tự động set active record là enbale, nếu bạn không dùng đến active record thì nên vộ hiệu hóa nó để tránh lãng phí tài nguyên của hệ thống.

Example Code

Note: tất cả những trang yêu cầu lấy dữ liệu trong db thì cần phải có khai báo kết nối database ($$his->load->database()            </div>
            
            <div class=

0