Tải bản đầy đủ (.pdf) (70 trang)

Bài giảng Phát triển ứng dụng web Bài 5 Lê Đình Thanh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (130.49 KB, 70 trang )

Bài giảng

PHÁT TRIỂN ỨNG DỤNG WEB
Lê Đình Thanh
Bộ mơn Mạng và Truyền thơng Máy tính
Khoa Cơng nghệ Thơng tin
Trường Đại học Công nghệ, ĐHQGHN
E-mail: ,
Mobile: 0987.257.504

1


Bài 5

Ứng dụng CSDL trên nền
web

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

2


Nội dung





Mơ hình ba tầng
Truy vấn dữ liệu


Truy vấn theo dữ liệu người dùng
Ghi dữ liệu

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Phần 1

Mơ hình ba tầng

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Mơ hình ba tầng
• Tầng khách: trình
diễn và tương tác
với người dùng
• Tầng giữa: thực hiện
các logic của ứng
dụng
• Tầng CSDL: bao
gồm hệ quản trị
CSDL, CSDL của ứng
dụng
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Tầng khách
• Thường là trình duyệt web,
nhưng có thể là web crawler,

web proxy
• Gửi HTTP Request lên Web
server và nhận HTTP
Response từ Web server
• Trình diễn nội dung web và
tương tác với người dùng

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Web client
Mã nguồn
trang web
được thể
hiện bằng
HTML, CSS
javascript

Do Web Server
gửi tới.

Hiển thị trên
giao diện người dùng
Web Browser
•Gửi yêu cầu và nhận nội dung (mã
nguồn HTML, CSS, javascript) trang
web từ Web Server.
•Thơng dịch mã nguồn trang web và
thể hiện kết quả trên màn hình.


Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

7


Web client/server
HTTP

Yêu cầu
Web Client/Browser
Microsoft Internet
Explorer, Netcapse
Navigator, Mozilla
FireFox, Google
Chrome…

Đáp ứng

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

Web Server
IIS, Apache,
Tomcat, Sambar,
Xitami …

8


Tầng giữa
• Các trang web/kịch bản được viết bằng các ngơn ngữ

kịch bản khác nhau, và HTML
• Web server





Nhận u cầu từ web client
Yêu cầu các chương trình dịch chạy các kịch bản/trang
động để sinh ra nội dung web (HTML, javascript, css)
Gửi nội dung web cho web client

• Chương trình dịch




Chạy các kịch bản được viết từ các ngôn ngữ khác nhau
(PHP, ASP, ASP.NET, C#, Java, …) để sinh ra nội dung web
Gửi truy vấn đến Hệ quản trị CSDL (tầng dưới) và nhận dữ
liệu nếu cần

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Tầng CSDL
• CSDL cho ứng dụng
• Hệ quản trị CSDL quản lý CSDL của
ứng dụng



Nhận truy vấn từ các chương trình dịch
tầng giữa, thao tác CSDL và trả kết quả
cho chương trình yêu cầu

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Ví dụ mẫu
• Quản lý sinh viên với các chức năng
sau:




Hiển thị danh sách sinh viên. Thực hiện
phân trang danh sách. Cho người dùng
tùy chỉnh số dịng/trang
Thêm, cập nhật, xóa sinh viên.

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Phần 2

Truy vấn và cập nhật CSDL
mysql, mysqli, pdo

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.



Sử dụng mysql extension
- hướng thủ tục
- không tiếp tục được nâng cấp
- không nên dùng nếu viết mã mới

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Kết nối CSDL MySQL
• mysql_connect(address, username,
password);
• mysql_select_db(database_name) or
die(mysql_error());
• Ví dụ
$ret = mysql_connect("localhost", "root", “rt");
if ($ret) { //Ket noi thanh cong
mysql_select_db("thuchanh"); //Chon CSDL
} else {
echo "Không kết nối được CSDL"; exit();
}
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Thực thi sql
• $ret = mysql_query($sql);







Nếu thực thi thành cơng, hàm trả về true, ngược lại
hàm trả về false và nguyên nhân lỗi được MySQL quản
lý. Đọc nguyên nhân lỗi bằng hàm mysql_error()
Với các lệnh update, delete, insert, MySQL quản lý số
bản ghi chịu tác động. Lấy số bản ghi chịu tác động
bằng hàm mysql_affected_rows()
Với lệnh select, hàm trả về recordset lưu kết quả truy
vấn. Hàm mysql_num_rows($recordset) trả về số bản
ghi nhận được.

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Cập nhật CSDL
• $count = mysql_query($sql);
• $sql: Lệnh insert, update, delete
• $count: Số bản ghi được cập nhật

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Xử lý kết quả truy vấn
$rs = mysql_query("select … from
…");
if (!$rs) {
echo mysql_error(); exit();
}
while ($row =

mysql_fetch_array($rs)) {
$field_value =
$row[“field_name”];
}
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Sử dụng mysqli extension
- từ PHP 5 trở đi, MySQL 4.1.3 trở đi
- hướng đối tượng + hướng thủ tục
- hỗ trợ câu lệnh được chuẩn bị sẵn
- hỗ trợ thủ tục lưu trữ
- hỗ trợ giao tác
- nên dùng nếu viết mã mới dung MySQL

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Kết nối CSDL
• $db = new mysqli($host, $user, $pwd, $database, [$port]);
– $host: Địa chỉ máy chạy mysql server


$user: Tên người dùng CSDL



$pwd: Mật khẩu người dùng CSDL




$database: Tên CSDL



$port: Cổng chạy mysql server (mặc định 3306)

• Ví dụ:
$db = new mysqli("localhost", "root", "1234", "qldt");
if ($db->connect_errno) {
echo "Failed to connect to MySQL: " . $db->connect_error;
}
• Thanh, Bài giảng Phát triển ứng dụng web.
Lê Đình


Cập nhật CSDL


//Thực hiện cập nhật



$res = $db->query("update ...");



//Kết quả cập nhật




If (!$res) {
echo " Khơng thành cơng";





}

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Truy vấn CSDL, sử dụng đệm


//Thực hiện truy vấn



$res = $db->query("SELECT ...");



//Duyệt các bản ghi



while ($row = $res->fetch_assoc()) {
echo " id = " . $row['id'] . "\n";






}



//Số bản ghi



$res->num_rows



//Chuyển đến bản ghi thứ i;



$res->data_seek($i);

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Truy vấn CSDL, không sử
dụng đệm



//Thực hiện truy vấn



$db->real_query("SELECT ...");



$res = $db->use_result();



//Duyệt các bản ghi



while ($row = $res->fetch_assoc()) {
echo " id = " . $row['id'] . "\n";





}


Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Câu lệnh được chuẩn bị

trước




Prepared Statement được sử dụng khi cần thực hiện câu lệnh lặp
lại nhiều lần để tăng hiệu năng
Chuẩn bị: Tạo mẫu câu lệnh, sử dụng dấu ? làm tham số.




Buộc các tham số




$stmt->execute();

Lấy kết qủa truy vấn




$code = 'DEU'; $language = 'Bavarian'; $official = "F"; $percent = 11.2;

Thực thi





$stmt->bind_param('sssd', $code, $language, $official, $percent);

Đặt giá trị các tham số




$stmt = $db->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");

$res = $stmt->get_result();

Đóng


$stmt->close();

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

Kiểu tham số
i – số nguyên
d – số thực
s – xâu ký tự
b - blob


Thủ tục lưu trữ





Stored Procedures được sử dụng để
tăng hiệu năng
Cập nhật


PROCEDURE p(IN id_val INT) BEGIN INSERT
INTO test(id) VALUES(id_val); END;



if (!$db->query("CALL p(1)"))



echo "CALL failed: “. $db->error;

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Thủ tục lưu trữ


Truy vấn


PROCEDURE p() BEGIN SELECT id FROM test; SELECT id + 1 FROM test; END;




if (!$db->multi_query("CALL p()")) {
echo "CALL failed: (" . $db->errno . ") " . $mysqli->error;




}





do {
if ($res = $db->store_result()) {
...




} else {
if ($db->errno) {



echo "Store failed: (" . $db->errno . ") " . $db->error;



}






}
} while ($db->more_results() && $db->next_result());

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


×