Trong bài này chúng ta sẽ vận dụng những kiên thức từ đầu series tới giờ để thực hiện viết một lớp xử lý database thường sử dụng trong PHP. Lưu ý với bạn rằng thư viện này mục đích là để các bạn hiểu được lập trình OOP chứ mình không ép các bạn lấy nó sử dụng trong project nhé.
Nội dung trong bài sẽ vận dụng thêm các kiến thức như các hàm xử lý mảng trong php, các hàm xử lý kết nối CSDL trong php như mysqli_connect, mysqli_close, mysqli_query … Nên nếu bạn chưa biết nó là gì thì hãy tìm hiểu trước nhé.
Tóm Tắt
1. Cấu trúc các lớp đối tượng xử lý database trong php
Vì mục đích của tôi sẽ trình bày các tính chất trong lập trình hướng đối tượng như tính kế thừa, tính trừu tượng … nên trong bài này chúng ta sẽ xây dựng một mô hình các lớp như sau:
Trong đó file DB_driver
đóng vai trò là adapter, nó sẽ chứa các hàm basic xử lý kết nối, xử lý câu truy vấn sql như insert, update, delete. File DB_business
sẽ kế thừa file DB_driver
và ngoài các hàm kế thừa có thể sử dụng thì nó sẽ có thêm các hàm bổ trợ như hàm select theo id, delete theo id, update theo id. Còn file demo
sẽ chứa những đoạn code hướng dẫn cách sử dụng.
2. Viết thư viện sử lý DB_business (Adapter)
Trong file này chúng ta sẽ xây dựng một số hàm như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Thư Viện Xử Lý Database
class
DB_driver
{
// Biến lưu trữ kết nối
private
$__conn
;
// Hàm Kết Nối
function
connect(){
// do some thing
}
// Hàm Ngắt Kết Nối
function
dis_connect(){
// do some thing
}
// Hàm Insert
function
insert(
$table
,
$data
){
// do some thing
}
// Hàm Update
function
update(
$table
,
$data
,
$where
){
// do some thing
}
// Hàm delete
function
remove(
$table
,
$where
){
// do some thing
}
// Hàm lấy danh sách
function
get_list(
$table
,
$select
,
$where
){
// do some thing
}
// Hàm lấy 1 record dùng trong trường hợp lấy chi tiết tin
function
get_row(
$table
,
$select
,
$where
){
// do some thing
}
}
Ý nghĩa của từng hàm mình đã comment rõ ràng rồi, bây giờ chúng ta sẽ xây dựng cho từng hàm nhé.
Hàm connect
1
2
3
4
5
6
7
8
9
10
11
12
// Hàm Kết Nối
function
connect()
{
// Nếu chưa kết nối thì thực hiện kết nối
if
(!
$this
->__conn){
// Kết nối
$this
->__conn = mysqli_connect(
'localhost'
,
'root'
,
'vertrigo'
,
'demo'
)
or
die
(
'Lỗi kết nối'
);
// Xử lý truy vấn UTF8 để tránh lỗi font
mysqli_query(
$this
->__conn,
"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"
);
}
}
Hàm dis_connect
1
2
3
4
5
6
7
// Hàm Ngắt Kết Nối
function
dis_connect(){
// Nếu đang kết nối thì ngắt
if
(
$this
->__conn){
mysqli_close(
$this
->__conn);
}
}
Hàm insert
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Hàm Insert
function
insert(
$table
,
$data
)
{
// Kết nối
$this
->connect();
// Lưu trữ danh sách field
$field_list
=
''
;
// Lưu trữ danh sách giá trị tương ứng với field
$value_list
=
''
;
// Lặp qua data
foreach
(
$data
as
$key
=>
$value
){
$field_list
.=
",$key"
;
$value_list
.=
",'"
.mysql_escape_string(
$value
).
"'"
;
}
// Vì sau vòng lặp các biến $field_list và $value_list sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi
$sql
=
'INSERT INTO '
.
$table
.
'('
.trim(
$field_list
,
','
).
') VALUES ('
.trim(
$value_list
,
','
).
')'
;
return
mysqli_query(
$this
->__conn,
$sql
);
}
Hàm update
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Hàm Update
function
update(
$table
,
$data
,
$where
)
{
// Kết nối
$this
->connect();
$sql
=
''
;
// Lặp qua data
foreach
(
$data
as
$key
=>
$value
){
$sql
.=
"$key = '"
.mysql_escape_string(
$value
).
"',"
;
}
// Vì sau vòng lặp biến $sql sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi
$sql
=
'UPDATE '
.
$table
.
' SET '
.trim(
$sql
,
','
).
' WHERE '
.
$where
;
return
mysqli_query(
$this
->__conn,
$sql
);
}
Hàm remove
1
2
3
4
5
6
7
8
9
// Hàm delete
function
remove(
$table
,
$where
){
// Kết nối
$this
->connect();
// Delete
$sql
=
"DELETE FROM $table WHERE $where"
;
return
mysqli_query(
$this
->__conn,
$sql
);
}
Hàm lấy danh sách
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Hàm lấy danh sách
function
get_list(
$sql
)
{
// Kết nối
$this
->connect();
$result
= mysqli_query(
$this
->__conn,
$sql
);
if
(!
$result
){
die
(
'Câu truy vấn bị sai'
);
}
$return
=
array
();
// Lặp qua kết quả để đưa vào mảng
while
(
$row
= mysqli_fetch_assoc(
$result
)){
$return
[] =
$row
;
}
// Xóa kết quả khỏi bộ nhớ
mysqli_free_result(
$result
);
return
$return
;
}
Hàm lấy 1 row
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Hàm lấy 1 record dùng trong trường hợp lấy chi tiết tin
function
get_row(
$sql
)
{
// Kết nối
$this
->connect();
$result
= mysqli_query(
$this
->__conn,
$sql
);
if
(!
$result
){
die
(
'Câu truy vấn bị sai'
);
}
$row
= mysqli_fetch_assoc(
$result
);
// Xóa kết quả khỏi bộ nhớ
mysqli_free_result(
$result
);
if
(
$row
){
return
$row
;
}
return
false;
}
Trong mỗi hàm hy vọng các bạn hiểu được ý nghĩa của từng đoạn code :D. Sau đây là nội dung toàn file DB_driver:
Toàn File DB_driver.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Thư Viện Xử Lý Database
class
DB_driver
{
// Biến lưu trữ kết nối
private
$__conn
;
// Hàm Kết Nối
function
connect()
{
// Nếu chưa kết nối thì thực hiện kết nối
if
(!
$this
->__conn){
// Kết nối
$this
->__conn = mysqli_connect(
'localhost'
,
'root'
,
'vertrigo'
,
'demo'
)
or
die
(
'Lỗi kết nối'
);
// Xử lý truy vấn UTF8 để tránh lỗi font
mysqli_query(
$this
->__conn,
"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"
);
}
}
// Hàm Ngắt Kết Nối
function
dis_connect(){
// Nếu đang kết nối thì ngắt
if
(
$this
->__conn){
mysqli_close(
$this
->__conn);
}
}
// Hàm Insert
function
insert(
$table
,
$data
)
{
// Kết nối
$this
->connect();
// Lưu trữ danh sách field
$field_list
=
''
;
// Lưu trữ danh sách giá trị tương ứng với field
$value_list
=
''
;
// Lặp qua data
foreach
(
$data
as
$key
=>
$value
){
$field_list
.=
",$key"
;
$value_list
.=
",'"
.mysql_escape_string(
$value
).
"'"
;
}
// Vì sau vòng lặp các biến $field_list và $value_list sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi
$sql
=
'INSERT INTO '
.
$table
.
'('
.trim(
$field_list
,
','
).
') VALUES ('
.trim(
$value_list
,
','
).
')'
;
return
mysqli_query(
$this
->__conn,
$sql
);
}
// Hàm Update
function
update(
$table
,
$data
,
$where
)
{
// Kết nối
$this
->connect();
$sql
=
''
;
// Lặp qua data
foreach
(
$data
as
$key
=>
$value
){
$sql
.=
"$key = '"
.mysql_escape_string(
$value
).
"',"
;
}
// Vì sau vòng lặp biến $sql sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi
$sql
=
'UPDATE '
.
$table
.
' SET '
.trim(
$sql
,
','
).
' WHERE '
.
$where
;
return
mysqli_query(
$this
->__conn,
$sql
);
}
// Hàm delete
function
remove(
$table
,
$where
){
// Kết nối
$this
->connect();
// Delete
$sql
=
"DELETE FROM $table WHERE $where"
;
return
mysqli_query(
$this
->__conn,
$sql
);
}
// Hàm lấy danh sách
function
get_list(
$sql
)
{
// Kết nối
$this
->connect();
$result
= mysqli_query(
$this
->__conn,
$sql
);
if
(!
$result
){
die
(
'Câu truy vấn bị sai'
);
}
$return
=
array
();
// Lặp qua kết quả để đưa vào mảng
while
(
$row
= mysqli_fetch_assoc(
$result
)){
$return
[] =
$row
;
}
// Xóa kết quả khỏi bộ nhớ
mysqli_free_result(
$result
);
return
$return
;
}
// Hàm lấy 1 record dùng trong trường hợp lấy chi tiết tin
function
get_row(
$sql
)
{
// Kết nối
$this
->connect();
$result
= mysqli_query(
$this
->__conn,
$sql
);
if
(!
$result
){
die
(
'Câu truy vấn bị sai'
);
}
$row
= mysqli_fetch_assoc(
$result
);
// Xóa kết quả khỏi bộ nhớ
mysqli_free_result(
$result
);
if
(
$row
){
return
$row
;
}
return
false;
}
}
3. Một số cách sử dụng thư viện
Trước tiên bạn tạo một database tên demo và tạo một table như sau:
1
2
3
4
5
6
CREATE
TABLE
IF
NOT
EXISTS `customer` (
`id`
int
(11)
NOT
NULL
AUTO_INCREMENT,
`
name
`
varchar
(200)
COLLATE
utf8_unicode_ci
DEFAULT
NULL
,
`phone`
varchar
(200)
COLLATE
utf8_unicode_ci
DEFAULT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB
DEFAULT
CHARSET=utf8
COLLATE
=utf8_unicode_ci AUTO_INCREMENT=1 ;
Trong file demo.php
bạn sẽ thực hiện lần lượt các đoạn code sau và xem trong db sẽ thấy tác dụng của thư viện này.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
require
(
'DB_driver.php'
);
// Tạo Mới Đối Tượng
$DB
=
new
DB_driver();
/// INSERT
$DB
->insert(
'customer'
,
array
(
'name'
=>
'Nguyễn Văn Cường'
,
'phone'
=>
'0979306603'
));
// UPDATE
$DB
->update(
'customer'
,
array
(
'name'
=>
'TheHalfHeart'
),
'id = 1'
);
// DELETE
$DB
->remove(
'customer'
,
'id = 1'
);
// GET LIST
var_dump(
$DB
->get_list(
'select * from customer'
));
// GET 1 ROW
var_dump(
$DB
->get_row(
'select * from customer where id = 2'
));
Note: Vì bài tương đối dài nên tôi sẽ trình bày tiêp ở bài tiếp theo nhé
4. Lời kết
Trong bài này các bạn chỉ cần hiểu được ý nghĩa của đối tượng trong PHP, hiểu được một số hàm xử lý database trong PHP thì sẽ hiểu được những đoạn code mà mình đã trình bày. Trong thực tế đó chỉ là những đoạn code đơn giản, còn những đoạn code phức tạp hơn nhiều, thậm chí dài đến mấy ngàn dòng.