Kỹ thuật lập trình PHP Lập trình PHP

Bài 17: Các thao tác với MySQL trong lập trình PHP

I. Kết nối cơ sở dữ liệu

a. Giới thiệu

PHP hỗ trợ phần mở rộng (extension) mysql, mysqli và pdo là nhưng phần mở rộng thông dụng được sử dụng cho việc kết nối đến cơ sở dữ liệu MySQL. Tuy nhiên phần mở rộng mysql đã được bỏ và thay thế bởi mysqli. MySQLi và PDO đều có những ưu điểm riêng tuy nhiên dựa vào từng trường hợp cụ thể để có sự lựa chọn thích hợp:

MySQLi chỉ hỗ trợ cơ sở dữ liệu MySQL trong khi PDO hỗ trợ 12 hệ quản trị cở sở dữ liệu khác nhau. Do đó khi cần thay đổi từ MySQL sang một hệ quản trị khác và nếu sử dụng MySQLi thì cần phải viết lại toàn bộ đoạn code và các câu truy vấn.

b. Kết nối cơ sở dữ liệu

Trong nội dung giáo trình này chỉ giới thiệu MySQLi với cách viết thủ tục.

Để kết nối đến MySQL, sử dụng câu lệnh sau để kết nối:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data);
?>

Hàm mysqli_connect() dùng để kết nối đến mysql, gồm 4 tham số lần lượt là host, username, password, database:

  • host : địa chỉ của server mysql
  • user : tên truy cập vào server
  • pass : mật khẩu tương ứng với user
  • data : tên cơ sở dữ liệu muốn kết nối

Nếu kết nối thành công, hàm sẽ trả về một handle để quản lý kết nối, trả về false nếu kết nối thất bại.

c. Xử lý lỗi khi không thể kết nối

Như đã đề cập, hàm kết nối sẽ trả về false nếu kết nối không thành công. Chúng ta sẽ kiểm tra và thông báo lỗi. Ví dụ:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data);
if($con == false) {
echo "Ket noi khong thanh cong";
exit();
}
?>

Đoạn lệnh trên sẽ in ra câu thông báo kết nối không thành công nếu có lỗi trong quá trình kết nối. Ngoài ra cũng có thể viết gọn lại như sau:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data) or die("Ket noi khong thanh cong");
?>

Kết quả của hai đoạn ví dụ trên là như nhau nếu kết nối thất bại.

II. Câu truy vấn

a. Truy vấn SQL

Câu truy vấn query là các câu lệnh SQL dùng để truy vấn cơ sở dữ liệu như select, update, insert, delete. Ví dụ:

select * from phpcanban
select * from phpcanban limit 0, 10
update phpcanban set baitap=10 where id=1

b. Thực thi câu truy vấn

Để thực hiện một câu truy vấn đến cơ sở dữ liệu chúng ta sử dụng hàm mysqli_query() gồm hai tham số. Tham số đầu tiên là handle kết nối (biến $con), tham số thứ hai là câu query. Kết quả trả về tương ứng với câu query sử dụng như sau:

  • select : resource để lấy dữ liệu
  • insert, update, delete : true nếu truy vấn thành công, false nếu truy vấn thất bại

Ví dụ:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data) or die("Ket noi khong thanh cong");
$result = mysqli_query($con, "insert into lop values('L001', '03DHTH1')");
if($result) {
echo "Them thanh cong";
} else {
echo "Them that bai";
}
?>

III. Truy vấn lấy dữ liệu

a. Sử dụng query select

Lệnh SELECT trong MySQL: SELECT <danh_sách_cột> FROM <tên_bảng>
Lấy dữ liệu chúng ta sử dụng câu lệnh SELECT. Bằng cách sử dụng hàm mysqli_query sẽ trả về một resource để lấy dữ liệu. Ví dụ:

$result = mysqli_query($con, "select * from sinhvien");

Nếu có lỗi sẽ trả về false.

b. Lấy dữ liệu từng dòng

Để lấy dữ liệu chúng ta sử dụng các hàm:

  • mysqli_fetch_assoc(resource) : lấy một dòng dữ liệu, kết quả trả về là một mảng kết hợp với các khóa là tên của các cột của bảng trong cơ sở dữ liệu.
  • mysqli_num_rows(resource) : số dòng lấy được của câu lệnh select.

Tham số cho mỗi hàm là một resource (kết quả trả về của hàm mysqli_query). Ví dụ:

<meta charset="utf-8" />
<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data) or die("Ket noi khong thanh cong");
mysqli_query($con, "set names utf8");
$result = mysqli_query($con, "select * from lop");
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "Lop: " . $row['malop'] . " - " . $row['tenlop'] . "<br />";
}
} else {
echo "Không có dữ liệu";
}
?>

Hình 68 Kết quả lấy dữ liệu

IV. Truy vấn thêm, xóa, sửa dữ liệu

a. Truy vấn thêm

Câu lệnh INSERT trong MySQL: INSERT INTO <tên_bảng>(<danh_sách_cột>) VALUES(<dữ liệu>)
Để thêm dữ liệu sử dụng câu query INSERT. Ví dụ

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data) or die("Ket noi khong thanh cong");
$result = mysqli_query($con, "insert into sinhvien values('SV01', 'Nguyen Khanh Duy', '123 Le Trong Tan')");
if($result) {
echo "Them thanh cong";
} else {
echo "Them that bai";
}
?>

b. Truy vấn xóa

Câu lệnh DELETE trong MySQL: DELETE FROM <tên bảng> WHERE <điều_kiện>
Để xóa dữ liệu sử dụng câu query DELETE. Ví dụ:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data) or die("Ket noi khong thanh cong");
$result = mysqli_query($con, "delete from sinhvien where masv = 'SV001'");
if($result) {
echo "Xoa thanh cong";
} else {
echo "Xoa that bai";
}
?>

c. Cập nhật dữ liệu

Câu lệnh UPDATE trong MySQL: UPDATE <tên_bảng> SET <tên_cột>=<giá_trị> WHERE <điều_kiện>

Để cập nhật dữ liệu sử dụng câu query UPDATE. Ví dụ:

<?php
$host = "localhost";
$user = "root";
$pass = "";
$data = "phpcanban";

$con = mysqli_connect($host, $user, $pass, $data) or die("Ket noi khong thanh cong");
$result = mysqli_query($con, "update sinhvien set hoten='Nguyen Duy' where masv='SV001'");
if($result) {
echo "Xoa thanh cong";
} else {
echo "Xoa that bai";
}
?>