7.1. TỔNG QUAN
C{c ứng dụng web ng|y nay thƣờng phải thao t{c với cơ sở dữ liệu. Cơ sở dữ liệu có chức năng lƣu trữ bền vững dữ liệu ngƣời dùng v| kết quả xử lý của ứng dụng. Nội dung web đƣợc ứng dụng tạo ra sẽ căn cứ v|o dữ liệu. Dữ liệu kh{c nhau dẫn đến nội dung web đƣợc tạo ra kh{c nhau. Nói c{ch kh{c, dữ liệu đóng
vai trị nhƣ ngun liệu để tạo ra nội dung ‚động‛ cho trang web.
PHP hỗ trợ nhiều thƣ viện khác nhau cho thao t{c với cơ sở dữ liệu. Thƣ viện
thứ nhất, mysql_, ra đời từ những phiên bản đầu tiên của PHP, cho phép thao tác
với cơ sở dữ liệu MySQL theo phƣơng pháp lập trình thủ tục. Từ PHP 5.5 trở đi,
mysql_ chính thức bị loại bỏ. Thƣ viện thứ hai, mysqli, ra đời từ phiên bản PHP 5.0,
cho phép thao tác với cơ sở dữ liệu MySQL theo cả phƣơng pháp lập trình thủ tục và lập trình hƣớng đối tƣợng. Thƣ viện thứ ba, PDO (PHP Data Objects), ra đời từ
phiên bản PHP 5.0, cho phép thao tác với nhiều hệ cơ sở dữ liệu khác nhau, ngồi
MySQL cịn nhiều hệ quản trị cơ sở dữ liệu khác, theo phƣơng ph{p lập trình hƣớng đối tƣợng.
MySQL l| hệ quản trị cơ sở dữ liệu đƣợc dùng phổ biến, đặc biệt với lập trình
viên PHP. Tổ hợp đƣợc ƣa thích l| LAMP (Linux, Apache, MySQL, PHP) hoặc
XAMP (X, Apache, MySQL, PHP), trong đó X (cross) {m chỉ hệ điều h|nh bất kỳ.
Điều đó có nghĩa, Apache, MySQL, PHP cũng có thể đƣợc dùng trên Windows hay MAC OS. Ngo|i MySQL, nhiều hệ quản trị cơ sở dữ liệu kh{c nhƣ PostgreSQL, Oracle, MongoDB, MS SQL, < cũng có thể đƣợc dùng với PHP.
Bất luận thƣ viện và hệ quản trị cơ sở dữ liệu nào đƣợc sử dụng, về cơ bản, thao t{c cơ sở dữ liệu gồm c{c bƣớc chính sau:
1. Tạo kết nối đến m{y chủ cơ sở dữ liệu
2. Lựa chọn cơ sở dữ liệu để làm việc
3. X}y dựng c{c truy vấn, cập nhật v| thực hiện truy vấn, cập nhật
4. Xử lý dữ liệu kết quả trả về khi thực hiện c{c truy vấn, cập nhật
5. Đóng kết nối đến m{y chủ cơ sở dữ liệu
Ngoài năm thao t{c chính nhƣ liệt kê ở trên, thay đổi cấu trúc bảng, thực thi giao tác, mã hóa dữ liệu, < l| một v|i thao t{c kh{c cũng có thể đƣợc yêu cầu. Thao tác
cơ sở dữ liệu sử dụng mysqli và PDO của PHP sẽ đƣợc trình b|y trong c{c mục tiếp theo.
WebAppDevLê Đình Thanh, Nguyễn Việt Anh
147
7.2. MYSQLi
7.2.1. Cài đặt và cấu hình
Từ phiên bản PHP 5.3, thƣ viện mysqli đƣợc c|i đặt v| bật theo mặc định. Điều đó có nghĩa chỉ cần c|i đặt PHP 5.3 trở lên l| có thể thao tác với cơ sở dữ liệu
MySQL. Nếu sử dụng c{c phiên bản PHP 5.0, 5.1 hay 5.2, lập trình viên cần c|i đặt
gói php-mysql để có mysqli, đồng thời cần bật mysqli bằng c{ch đƣa v|o tệp cấu
hình php.ini dịng có nội dung extension=php_mysqli.dll. Nhắc lại rằng, thƣ viện
mysqli là một mở rộng của PHP để thao t{c với cơ sở dữ liệu MySQL chứ không
phải một hệ quản trị cơ sở dữ liệu n|o kh{c. Nếu hệ quản trị cơ sở dữ liệu l| MySQL v| lập trình viên PHP khơng có ý định chuyển sang một hệ quản trị cơ sở dữ liệu kh{c thì mysqli l| một lựa chọn tốt. Nó hỗ trợ tất cả những đặc trƣng của
MySQL và cho phép thao t{c với MySQL ở một tốc độ cao.
7.2.2. Mở và đóng kết nối cơ sở dữ liệu
Thƣ viện mysqli cho phép thao t{c với MySQL theo cả lập trình thủ tục v| lập trình hƣớng đối tƣợng. Gi{o trình chỉ trình b|y sử dụng mysqli theo phƣơng ph{p lập trình hƣớng đối tƣợng vì đ}y l| phƣơng ph{p lập trình chính đƣợc sử dụng ngày nay. Để kết nối đến m{y chủ MySQL v| lựa chọn cơ sở dữ liệu l|m việc, ứng
dụng cần tạo một đối tƣợng mysqli theo cú pháp
$db = new mysqli($host, $username, $passwd, $dbname, $port)
trong đó, $host là địa chỉ IP hoặc tên miền của m{y chủ MySQL, $username và
$passwd l| tên sử dụng v| mật khẩu ngƣời dùng cơ sở dữ liệu, $dbname l| tên cơ sở
dữ liệu, và $port l| cổng đƣợc MySQL lắng nghe. Cổng mặc định cho MySQL l| 3306. Nếu sử dụng cổng mặc định thì tham số $port không cần đƣợc chỉ định trong h|m tạo đối tƣợng mysqli. Kết quả của h|m tạo mysqli, nếu th|nh công, là một đối tƣợng kết nối đến cơ sở dữ liệu đƣợc chỉ định. Ngƣợc lại, nếu có lỗi khơng kết nối đƣợc, số lỗi v| mã lỗi sẽ đƣợc trả về trong các thuộc tính
connect_errno, connect_error, tƣơng ứng.
Để đóng kết nối cơ sở dữ liệu, sử dụng phƣơng thức close(), khơng có tham số, của mysqli. Thao t{c n|y tuy đơn giản nhƣng rất quan trọng vì nó có t{c dụng giải phóng c{c t|i nguyên đã cấp cho kết nối. Nếu ứng dụng khơng đóng kết nối, sau nhiều lần thao t{c cơ sở dữ liệu, nhiều kết nối đƣợc mở ra nhƣng khơng đƣợc đóng lại dẫn đến t|i ngun bị chiếm dụng lãng phí v| hiệu năng của ứng dụng bị ảnh hƣởng.
Mã nguồn thao t{c cơ sở dữ liệu sử dụng mysqli tổng qu{t có dạng nhƣ ví dụ
sau đ}y. 1. <?php